GCC Как экспортировать функцию из статической библиотеки - PullRequest
2 голосов
/ 19 июня 2009

Я хочу создать общую библиотеку из нескольких статических библиотек, используя GCC под OS X.

В некоторых статических библиотеках в разделяемой библиотеке нет кода, вызывающего его, я просто хочу экспортировать символы в эти статические библиотеки. Это работает в режиме отладки, но не в режиме выпуска (особенно когда я включаю чередование мертвого кода). Я могу понять причину, gcc думаю, что эти функции на статических библиотеках никогда не используются. но как я могу заставить gcc включить эти символы?

Я уже пытался добавить опцию -u для загрузчика, но он генерирует только локальный символ. как заставить компоновщик генерировать символ экспорта?

Кроме того, мне интересно, есть ли способ добавить директивы компоновщика в исходный код, как MSVC #pragrma comment(linker, "/INCLUDE:xxxx")

функция, которую я определил в статической библиотеке, выглядит следующим образом:

extern "C"
void test() {}

Заранее спасибо! -Jonny

Ответы [ 2 ]

1 голос
/ 19 июня 2009

Вы пробовали --whole-archive?

0 голосов
/ 19 июня 2009

Используйте ar, чтобы разобрать статические библиотеки в составляющие их объектные файлы. Затем свяжите эти объекты вместе, чтобы создать общую библиотеку.

ar -x libstatic.a
(produces a bunch of *.o files)
gcc -shared -olibshared.so *.o # Linux
ld -dylib -olibshared.dylib *.o # Mac OSX
...