Подтвердить что ты не робот

Преобразовать статическую библиотеку в общую библиотеку?

У меня есть сторонняя библиотека, которая состоит в основном из большого количества статических файлов (.a). Я могу скомпилировать это в один файл библиотеки .a, но мне действительно нужно, чтобы он был единственным файлом разделяемой библиотеки .so.

Можно ли преобразовать статический файл .a в общий файл .so? Или, как правило, существует хороший способ объединить огромное количество статических файлов .a с несколькими объектными файлами .o в один файл .so?

4b9b3361

Ответ 1

Это (с соответствующим -L, конечно)

gcc -shared -o megalib.so foo.o bar.o -la_static_lib -lb_static_lib

Не так ли?

Ответ 2

Вы не можете сделать это, если объекты в статической библиотеке были скомпилированы без -fpIC или как.

Ответ 3

g++ -shared -o megalib.so foo.o bar.o -Wl,--whole-archive -la_static_lib -lb_static_lib -Wl,--no-whole-archive -lc_static_lib -lother_shared_object

Я не уверен в gcc, но для g++ мне пришлось добавить параметр -whole-archive linker для включения объектов из статических библиотек в общий объект. Опция -no-whole-archive необходима, если вы хотите установить ссылку на libc_static_lib.a и libother_shared_object.so, но не включать их в целом в megalib.so.

Ответ 4

ar -x lib***.a
gcc -shared *.o -o lib***.so

Ответ 5

ar -x также может быть полезен, если вы хотите сфокусироваться на определенных объектах из .a, и вы не хотите ничего добавлять.