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

StackOverflow https://stackoverflow.com/questions/655163

Вопрос

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

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

Это было полезно?

Решение

Делает ли это (с соответствующими -L, конечно)

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

Не сделать это?

Другие советы

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

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, чтобы включить объекты из статических библиотек в общий объект. Опция --no-whole-archive необходима, если вы хотите создать ссылку на libc_static_lib.a и libother_shared_object.so, но не включать их в megalib.so целиком.

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

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

Примеры:

ar -x lib***.a
gcc -shared *.o -o lib***.so
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top