强制链接到未使用的共享库

Posted

技术标签:

【中文标题】强制链接到未使用的共享库【英文标题】:Force to link against unused shared library 【发布时间】:2012-07-24 12:44:28 【问题描述】:

从 gcc 4.5 移至 gcc 4.6,现在它不会链接到编译时未使用的库(即,如果没有从中导入符号)。

然而,这些库的目的是它们执行静态构造函数,从而使它们在运行时可用于应用程序(注册它们的符号)。

有没有办法强制 gcc 链接到通过 -l 列出的所有库?

【问题讨论】:

可能是 as-needed 选项的变化。尝试在 -Wl,-no-as-needed 中添加 -l 标志(不记得确切的语法,现在无法访问编译器) 【参考方案1】:

看来您需要-Wl,--no-as-needed 才能完全禁用它。或者,--no-as-needed -lfoo --as-needed 仅针对 libfoo 禁用“按需”。

来源:https://lists.ubuntu.com/archives/ubuntu-devel/2010-November/031991.html

【讨论】:

似乎没有帮助,现在也尝试使用--copy-dt-needed-entries。也许需要重新编译源文件,而不仅仅是重新链接?

以上是关于强制链接到未使用的共享库的主要内容,如果未能解决你的问题,请参考以下文章

当存在同名的共享库时,如何强制链接静态库

强制 GCC 通知共享库中未定义的引用

C++ 强制卸载共享库

Git远程/共享预提交钩子

如何在编译期间强制犰狳库链接到本地​​ OpenBLAS

构建链接到其他非标准共享库的共享库