小编Jua*_*uan的帖子

与“ cc”链接时如何指定备用链接器命令

当您用于cc(1)链接程序时,它将调用默认的链接程序命令。例如,您的编译器版本可能已构建为在类似Unix的平台上默认使用/ usr / bin / ld。

有没有一种方法可以指定cc(1)(或c++(1))应使用的另一个链接器命令(例如,/usr/local/bin/ld代替/usr/bin/ld)?我主要对gcc和clang感兴趣。

我不是在寻找涉及单独运行各个编译步骤的方法(例如,预处理,编译,汇编,链接)。

例如,我希望这样的事情可以完成这项工作:

env LD=/usr/local/bin/ld cc foo.c -o foo
Run Code Online (Sandbox Code Playgroud)

但这不适用于gcc或clang。当然,如果您有一个先生成目标文件的生成文件,然后调用$ {LD}进行链接(例如env LD=/usr/local/bin/ld make),它将起作用

更新(有一种可能的动机):可以轻松地使用与默认链接程序不同的链接程序进行测试。例如,很高兴能够做到这一点:

cc --linker=/usr/local/bin/ld foo.c -o foo
Run Code Online (Sandbox Code Playgroud)

相反,您必须生成目标文件,运行cc -v以找出的参数ldld并使用这些参数手动运行所需的参数:

cc -c foo.c
cc -v foo.c -o /dev/null
Run Code Online (Sandbox Code Playgroud)

现在查看链接器调用,并手动复制/粘贴替换链接器和临时目标文件。喜欢的东西,你这个替换(从测试在Fedora 23所采取的示例)/usr/libexec/gcc/x86_64-redhat-linux/5.3.1/collect2/usr/local/bin/ld(虽然它不是完全相同一样collect2):

/usr/local/bin/ld -plugin /usr/libexec/gcc/x86_64-redhat-linux/5.3.1/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/5.3.1/lto-wrapper -plugin-opt=-fresolution=/tmp/jhein/ccM2XKIg.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 …
Run Code Online (Sandbox Code Playgroud)

c c++ linker

7
推荐指数
2
解决办法
6527
查看次数

有没有办法检查〜/ .hgrc文件中的hg版本?

在我的〜/ .hgrc文件中设置特定设置之前,我可以检查mercurial的版本吗?例如,我想启用扩展(比如搁置扩展),但仅当hg版本是特定版本(例如2.8或更高版本)时.当一个人的主目录在安装了各种版本的hg的许多机器上共享(想想nfs)时,这尤其有用.

mercurial

5
推荐指数
1
解决办法
192
查看次数

标签 统计

c ×1

c++ ×1

linker ×1

mercurial ×1