【问题标题】:is there a way to ensure that clang links an unreferenced library symbol有没有办法确保 clang 链接一个未引用的库符号
【发布时间】:2015-09-29 00:41:58
【问题描述】:

我有一个链接到静态库的可执行文件。该库公开了一个符号 create_widget()。这个符号没有被 clang 链接到可执行文件,因为它没有被可执行文件引用。

可执行文件链接到另一个库,该库在运行时可以引用可执行文件公开的任何符号。我需要让这个库看到 create_widget()。

有没有解决这个问题的好方法?如果没有,我将与所有需要它的可执行文件共享 create_widget() 的源代码,而不是将其捆绑在库中。

【问题讨论】:

    标签: linker export clang symbols


    【解决方案1】:

    有两种方法可以做到:-

    1) 显式链接导出create_widget() 的目标文件,而不是 比从图书馆。这样,它导出的任何符号都将被链接 它们是否被引用。

    2) 使用选项--whole-archive -lwidget --no-whole-archive 链接静态库(比如libwidget.a)。 这样,libwidget 中的每个目标文件都将被链接,无论它是否包含任何 是否引用符号。

    【讨论】:

    • 感谢 mike.. 我知道 gcc 的“--whole-archive”选项,但 clang 3.8 给了我一个“不支持的选项”。在这种情况下,它没有实际意义,因为第一个选项工作正常,并且库包含大量不必要的符号。
    猜你喜欢
    • 2016-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多