Имеются несколько библеотек в .a и .so версиях. Как заставить gcc прилинковывать одни библиотеки как статические, а другие как динамические. Получается либо приликовываются все статические, либо все динамические.
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 соответственно для включения в бинарник всей статической либы или только той части, что используется. Это нужно например тогда, когда ты не вызываешь из нее функции по имени, а как нибудь подругому.
Когда знаешь путь к статической либе, то совершенно не надо указывать нестанлартные ключи -Wl, а достаточно указать имя либы, можно с полным путем, т е не -lname, а library_name.a и все.
Antichrist прав. Статические либы собранные без PIC (position independent code) в динамическую библиотеку вкомпивать нельзя. Иначе она будет вгружаться в одни и те же адреса для всех процессов использующих ее. А это чревато боком :))