有没有办法确保 clang 链接未引用的库符号

is there a way to ensure that clang links an unreferenced library symbol

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

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

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

有两种方法可以做到:-

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

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