【问题标题】:GCC How to export a function from static libraryGCC如何从静态库中导出函数
【发布时间】:2010-11-04 05:03:02
【问题描述】:

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

在某些静态库中,共享库中没有代码调用它,我只想导出这些静态库中的符号。这在调试模式下有效,但在发布模式下无效(尤其是当我启用死代码条带化时)。我可以理解原因,gcc 认为静态库上的这些函数从未使用过。但是如何强制 gcc 包含这些符号?

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

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

我在静态库中定义的函数是这样的:

extern "C"
void test() {}

提前致谢! -乔尼

【问题讨论】:

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


    【解决方案1】:

    你试过--whole-archive吗?

    【讨论】:

      【解决方案2】:

      使用 ar 将静态库分解为它们的组成目标文件。然后将这些对象链接在一起以创建共享库。

      ar -x libstatic.a (产生一堆 *.o 文件) gcc -shared -olibshared.so *.o # Linux ld -dylib -olibshared.dylib *.o # Mac OSX

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-24
        • 1970-01-01
        • 2018-12-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多