Могу ли я создать общую библиотеку, связав статические библиотеки? - PullRequest
12 голосов
/ 10 января 2012

У меня есть несколько статических библиотек (* .a), и я хочу создать общую библиотеку (* .so) для связи с этими статическими библиотеками (* .a). Как я могу сделать это в gcc / g ++?

Ответы [ 2 ]

18 голосов
/ 11 января 2012

Вы можете (просто извлеките все файлы .o и свяжите их с -shared, чтобы получить .so), но работает ли он и насколько хорошо он работает, зависит от платформы и от того, была ли статическая библиотека составлено как позиционно-независимый код (PIC). На некоторых платформах (например, x86_64) не-PIC-код недопустим в разделяемых библиотеках и не будет работать (на самом деле я думаю, что компоновщик откажется сделать .so). На других платформах не PIC-код будет работать в разделяемых библиотеках, но копия библиотеки в памяти не может использоваться совместно различными программами, использующими ее, или даже разными экземплярами одной и той же программы, поэтому это приведет к огромному увеличению памяти.

6 голосов
/ 10 января 2012

Я не понимаю, почему вы не могли просто собрать файлы вашей динамической библиотеки в файлы .o и связать их с

gcc -shared *.o -lstaticlib1 -lstaticlib2 -o mylib.so
...