【问题标题】:g++ links library ld doesn'tg++ 链接库 ld 没有
【发布时间】:2014-03-14 19:11:59
【问题描述】:

我想知道为什么

g++ test1.o test2.o -o test.x -lgtk-x11-2.0

工作,而

ld 'r test1.o test2.o -o test.o -lgtk-x11-2.0

给予:

ld: cannot find -lgtk-x11-2.0

除非我明确包含添加-L/usr/lib/i386-linux-gnu的路径

我尝试了将路径添加到 $LD_LIBRARY_PATHld.so.conf 的所有方法,但没有任何效果,我无法解释这两个调用之间的区别。

在 ld 的手册上有说明:

搜索的默认路径集(没有用 `-L' 指定)取决于 ld 使用的仿真模式,在某些情况下还取决于它的配置方式

但尝试不同的仿真(通过使用 -m*emulation*)意味着段错误(可能是因为默认的仿真 elf_i386 是正确的)。

你能帮我解释一下这个话题吗?

【问题讨论】:

    标签: c++ compiler-construction g++ ld


    【解决方案1】:

    gcc -print-search-dirs(或g++)显示编译器使用的库搜索路径; /usr/lib/i386-linux-gnu 很可能是内置的。此选项由 gcc 传递给链接器,但未内置到链接器中。

    尝试添加-vg++ -v test1.o test2.o -o test.x -lgtk-x11-2.0 查看链接器是如何被调用的。

    【讨论】:

      【解决方案2】:

      如果你对ld使用的路径感到好奇

      ld --verbose | grep SEARCH
      

      通常您不想明确使用ld 进行链接,最好单独使用gcc 执行每项任务,并且您应该更喜欢后者而不是前者。

      如果您想了解更多关于gcc 设置的信息

      gcc -dumpspecs
      

      让您体验一下查看gcc 的内部结构的感觉,如果您对此很认真,您可能最终会查看gcc 手册,但我不认为为了它,这是值得做的事情。

      在编译gcc 时定义的设置也很重要,因此如果您真的想掌握内部工作原理,还应该学习如何从源代码编译gcc

      tl;博士

      只需使用gcc 进行编译和链接,其他选项可能不值得麻烦。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-25
        • 1970-01-01
        • 1970-01-01
        • 2017-05-24
        • 2011-04-09
        • 1970-01-01
        • 1970-01-01
        • 2023-01-30
        相关资源
        最近更新 更多