LINUX.ORG.RU

.so & .a linking


0

0

Имеются несколько библеотек в .a и .so версиях. Как заставить gcc прилинковывать одни библиотеки как статические, а другие как динамические. Получается либо приликовываются все статические, либо все динамические.

anonymous

Учись пока я жив :))

gcc -o test ./test.c -L./ -Wl,-Bstatic -llib_test_that_must_be_linked_staticaly -Wl,-Bdynamic -llib_test_that_must_be_linked_dynamicaly

Вот и все. Ну понятно, что пути к ним должны быть описаны. Типа -L./ если в текущем директории лежат.

Еще может пригодится такая опция как -Wl,--whole-archive и -Wl,--no-whole-archive соответственно для включения в бинарник всей статической либы или только той части, что используется. Это нужно например тогда, когда ты не вызываешь из нее функции по имени, а как нибудь подругому.

Banshee
()

Когда знаешь путь к статической либе, то совершенно не надо указывать нестанлартные ключи -Wl, а достаточно указать имя либы, можно с полным путем, т е не -lname, а library_name.a и все.

vodz ★★★★★
()

2vodz:

Согласен, но для того, чтобы узнать путь, нужно в configure.in например, сделать некоторые телодвижения (поискать эти самые либы).

Banshee
()
Ответ на: комментарий от Banshee

А ежели собирать шарную либу с -Wl,--whole-archive и несколькими .a -- эти статические штуки будут засунуты в шарлибу?

ingvarr
()
Ответ на: комментарий от ingvarr

НЕЛЬЗЯ!!! Сколько можно повторять, на сволочном x86 без PIC все сосут...

Antichrist
()

Antichrist прав. Статические либы собранные без PIC (position independent code) в динамическую библиотеку вкомпивать нельзя. Иначе она будет вгружаться в одни и те же адреса для всех процессов использующих ее. А это чревато боком :))

Banshee
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.