【问题标题】:C++ linker - How can g++ pick up ldC++ 链接器 - g++ 如何获取 ld
【发布时间】:2016-12-25 01:48:24
【问题描述】:

我是 C++ 编译器的新手。我想知道如何更改 g++ 的某些设置 以调用我想要的正确 ld 版本。

例如,我试过了:

g++“一些共享库和文件”

然后 /usr/bin/ld 将在内部被调用。我应该怎么做才能让 g++ 调用 /home/alex/binutils-2.25/bin/ld

非常感谢。

亚历克斯

【问题讨论】:

  • @juanchopanza 嘿,很抱歉,但这不是他想给另一个 ld 打电话的重复(这里有一些想法:cboard.cprogramming.com/cplusplus-programming/…
  • @Jean-FrançoisFabre 哎呀!重新打开。
  • 简而言之:用g++ -c单独编译源文件,然后将所有东西链接在一起作为一个单独的阶段。搜索“g++ compile only”、“makefiles”
  • XY 问题?这个练习的目标是什么?

标签: c++ linker


【解决方案1】:

一般来说不是最好的主意,因为这两者紧密集成,并且 GCC 有自己的搜索路径以及针对特定 GCC 构建的适当工具是有原因的,因此最好将工具链作为一个整体进行切换。

无论如何,Jean-François Fabre 提供的链接在其-B 参数建议中是正确的,而关于PATH 环境变量则不太正确,因为只有在GCC 内部路径中没有匹配项时才会搜索PATH,而且通常那里有东西。

您可以使用g++ -print-search-dirs 查看GCC 使用的当前路径来查找其组件,您对programs 感兴趣。使用g++ -print-prog-name=ld 检查编译器在哪里找到ld(或任何其他组件)也很容易,它还允许检查-B 如何影响结果,例如:

$ g++ -print-prog-name=ld
/usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld
$ g++ -B/home/rik/bin -print-prog-name=ld
/home/rik/bin/ld

比较一下

$ PATH=/home/rik/bin:$PATH g++ -print-prog-name=ld
/usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld

[编辑]

顺便说一句,如果您的 GCC 是使用 --with-ld 选项专门配置的(不是通常的方式,但是),那么即使这对您也无济于事,它会覆盖所有其他路径。

【讨论】:

    猜你喜欢
    • 2014-03-14
    • 1970-01-01
    • 2012-04-10
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多