gcc在链接时可以使用多个核心吗?

gcc在链接时可以使用多个核心吗?,gcc,linker,Gcc,Linker,因此,当使用GCC编译成吨的源文件时,可以使用-j来使用所有可用的核心。但是链接器呢?是否有类似的加速链接的选项,或者GCC不支持多线程?在一些较大的项目中,这确实需要一段时间。。。(…我讨厌等待!) 编辑:感谢您指出-j是make的选项,而不是gcc/g++。但这并不能回答我的问题!我想知道gcc是否可以在链接程序时使用多线程 您所指的-j选项由make而不是gcc处理 使用make-jn要求make使用多个并行进程运行Makefile中的操作(用数字替换n。如果是make-j2则是2进程)

因此,当使用GCC编译成吨的源文件时,可以使用-j来使用所有可用的核心。但是链接器呢?是否有类似的加速链接的选项,或者GCC不支持多线程?在一些较大的项目中,这确实需要一段时间。。。(…我讨厌等待!)


编辑:感谢您指出-j是make的选项,而不是gcc/g++。但这并不能回答我的问题!我想知道gcc是否可以在链接程序时使用多线程

您所指的
-j
选项由
make
而不是
gcc
处理

使用
make-jn
要求
make
使用多个并行进程运行
Makefile
中的操作(用数字替换
n
。如果是
make-j2
则是
2
进程)

Make在并行构建时可以很好地处理大多数同步任务。

Try,它由Ian Lance Taylor等人从Google开发,作为GNU binutils包的一部分发布

来自维基百科:

编写gold的动机是制作一个比GNU链接器更快的链接器,特别是对于用C编写的大型应用程序++

我必须承认我自己还没试过,但网页上提到过

有关更多信息,请参阅gold:作者的一篇文章

更重要的是,请参阅Sander Mathijs van Veen的增量/并行/并发链接工作及其参考书目。

,LLVM项目开发的链接器,默认情况下将使用多核。我还发现它比gold多线程运行快2倍左右(
-Wl,--threads-Wl,--threads count,xxx

在一个最小的合成基准上,我已经对LD与gold与LLVM LLD进行了基准测试,时间结果清楚地表明gold和LLVM LLD都能够根据
时间进行并行链接,例如:

nogold:  wall=4.35s user=3.45s system=0.88s 876820kB
gold:    wall=1.35s user=1.72s system=0.46s 739760kB
lld:     wall=0.73s user=1.20s system=0.24s 625208kB
我们知道使用平行连接是因为


这些基准测试还复制了Martin Richtarsky快2倍的LLVM LLD链接时间。

您可能对distcc感兴趣,它允许您在网络中的多台机器上分发编译。@Jon:我对并行编译不感兴趣,但对并行链接感兴趣!为什么这个问题被否决了?天知道gnu链接器速度很慢,想办法让它链接得更快只会提高构建周期。链接显然不是一项并行任务。请注意,有时您可以使用可见性属性和/或-fvisibility gcc选项来减少链接器的工作量。我使用一个精确的基准点以比gold快2倍的速度复制了LLD。必须强调的是,
gold
不使用多线程,除非您通过
gcc-Wl,--threads-Wl,--thread count,$(nproc)