GCC如何从静态库导出函数

时间:2009-06-19 03:10:19

标签: c++ macos linker shared-libraries symbols

我想在OS X下使用GCC从几个静态库创建一个共享库。

在一些静态库中,共享库中没有代码调用它,我只想导出这些静态库中的符号。这在调试模式下工作,但不在释放模式下(特别是当我启用死代码条带化时)。我可以理解原因,gcc认为静态库中的这些函数从未使用过。但是我如何强制gcc包含这些符号呢?

我已经尝试为loader添加-u选项,但它只生成一个“本地”符号。如何让链接器生成导出符号?

另外,我想知道是否有办法在源代码中添加链接器指令,就像MSVC #pragrma comment(linker, "/INCLUDE:xxxx")

一样

我在静态库中定义的函数如:

extern "C"
void test() {}

提前致谢! -Jonny

2 个答案:

答案 0 :(得分:1)

您是否尝试过--whole-archive

答案 1 :(得分:0)

使用ar将静态库反汇编为其组成对象文件。然后将这些对象链接在一起以创建共享库。

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