8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

使用 gcc 链接库:参数顺序

Yiping Hao 1月前

22 0

当我将 Ubuntu 发行版升级到 11.10 后,我开始看到 gcc 的奇怪链接器行为。我能够通过将 -l 参数移动到 gcc 命令的末尾来解决问题(我的问题...

当我将 Ubuntu 发行版升级到 11.10 后,我开始看到 gcc 的链接器行为很奇怪。我通过将参数移到 -l gcc 命令的末尾来修复该问题(我的问题类似于 此线程 ,并且建议的解决方案对我有用...谢谢!)。

我的问题是...为什么我现在才遇到这个问题?我已经在 OS X 和 Ubuntu 上开发和测试此代码一段时间了:我从来不知道 -l 命令应该位于 .c 文件之后,但即便如此,这以前从未给我带来过问题。我猜这与 GCC 的版本有关,而不是与 Ubuntu 发行版本有关。

这个新版本是否只是比旧版本更严格地执行此要求?

帖子版权声明 1、本帖标题:使用 gcc 链接库:参数顺序
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Yiping Hao在本站《c》版块原创发布, 转载请注明出处!
最新回复 (0)
  • vam 1月前 0 只看Ta
    引用 2

    我怀疑您的问题是因为 Ubuntu v11.10 的 GCC v4.6 -Wl,--as-needed 默认启用,这使得链接器对命令行上库的顺序很敏感。

    • p1

    • p2

    • p3

    [1] https://wiki.ubuntu.com/OneiricOcelot/ReleaseNotes#GCC_4.6_Toolchain

    [2] https://wiki.ubuntu.com/ToolChain/CompilerFlags#A-Wl.2C--as-needed

    [3] https://wiki.ubuntu.com/NattyNarwhal/ToolchainTransition

  • 对于 gcc 以及其他编译器(例如 clang),链接器命令参数的顺序很重要。根据经验,我在编写链接器命令时将使用以下顺序:

    1. 目标文件 (*.o)
    2. 静态库(*.a)
    3. 共享库(*.so)

    共享库的顺序也很重要。如果 libfoo.so 依赖于 libbar.so,则应 -lfoo 在之前 -lbar .

    如果您不知道确切的依赖关系,这可能会变得非常复杂。Linux 上的以下命令可能会有所帮助:

    ldd /path/to/libfoo.so
    

    这列出了 libfoo.so 所依赖的所有共享库。

    至于为什么这个问题会在特定的 gcc 版本中出现,如果不知道应用程序需要哪些库,就很难说清楚。但如果您按照我上面描述的顺序应用,它应该适用于较旧和较新的 gcc 版本。

    提示:如果使用正确,CMake 可以为您处理所有依赖关系...

返回
作者最近主题: