相关疑难解决方法(0)

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

因此,当使用GCC编译大量源文件时,可以使用-j来使用所有可用内核.但链接器怎么样?是否有类似的选项来加速链接或GCC不支持多线程?在一些较大的项目中,它可能需要一段时间......(......我讨厌等待!)

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

linker gcc

28
推荐指数
4
解决办法
8025
查看次数

使用Clang和CMake时使用LLVM链接器

告诉CMake使用LLVM链接器llvm-link而不是GNU ld作为链接器的最佳方法是什么?使用时配置项目

CXX=clang++ cmake <args>
Run Code Online (Sandbox Code Playgroud)

默认链接器似乎不受影响,保留usr/bin/ld(在Linux上).

这可能不使用单独的工具链文件吗?

linker cmake clang

16
推荐指数
2
解决办法
2万
查看次数

如何在 Windows 上将 lld 与 CMake 一起使用?

我正在尝试使用 CMake 和 clang + lld ( http://releases.llvm.org/ ) + mingw ( https://sourceforge )编译 SDL2 ( https://www.libsdl.org/download-2.0.php ) .net/projects/mingw-w64/ ) 头文件在 Windows 10 上。尽管我做了很多努力,但我似乎无法让 CMake 通过 mingw ld 链接器使用 lld 链接器。

我目前使用批处理文件构建 sdl2:

@ECHO OFF

IF NOT EXIST build MKDIR build
PUSHD build

cmake.exe -DCMAKE_BUILD_TYPE=Debug -G "MinGW Makefiles"^
  -DCMAKE_C_FLAGS="-target x86_64-windows-gnu"^
  -DCMAKE_C_COMPILER_ID="Clang" -DCMAKE_C_COMPILER="clang.exe"^
  -DCMAKE_CXX_FLAGS="-target x86_64-windows-gnu"^
  -DCMAKE_CXX_COMPILER_ID="Clang++" -DCMAKE_CXX_COMPILER="clang++.exe"^
  -DDIRECTX=OFF -DSDL_TEST=OFF -DSDL_SHARED=OFF -DSDL_STATIC=ON ..

cmake.exe --build . -- -j %NUMBER_OF_PROCESSORS%

POPD

Run Code Online (Sandbox Code Playgroud)

我试过无济于事:

任何帮助将不胜感激。

c++ windows cmake llvm lld

10
推荐指数
1
解决办法
1676
查看次数

与“ 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
查看次数

无法更改CMake中的默认链接器

我正在尝试将链接器更改为ld.gold,以便可以更快地构建LLVM和CLANG。我用以下方法更改了环境变量:

export LD=ld.gold
Run Code Online (Sandbox Code Playgroud)

并且我已将ccmake中的CMAKE_LINKER更改为/usr/bin/ld.gold。但是,当我生成文件时,我的链接器被检测为GNU ld。编译过程中的最高运行确认ld正在运行,而不是黄金运行。

当将CMake Link Executable变量编辑为:

cmake -DCMAKE_LINKER=/usr/bin/ld.gold -DCMAKE_CXX_LINK_EXECUTABLE="<CMAKE_LINKER> <FLAGS> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <OBJECTS> -o <TARGET> <LINK_LIBRARIES>" -G "Unix Makefiles" ../llvm
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

/usr/bin/ld.gold: -Werror=date-time: unknown option
/usr/bin/ld.gold: use the --help option for usage information
utils/PerfectShuffle/CMakeFiles/llvm-PerfectShuffle.dir/build.make:94: recipe for target 'bin/llvm-PerfectShuffle' failed
make[2]: *** [bin/llvm-PerfectShuffle] Error 1
CMakeFiles/Makefile2:13983: recipe for target 'utils/PerfectShuffle/CMakeFiles/llvm-PerfectShuffle.dir/all' failed
Run Code Online (Sandbox Code Playgroud)

我在Ubuntu 16.04上,但是在Arch Linux上也遇到了同样的问题。

谢谢。

c++ linux linker cmake clang

6
推荐指数
1
解决办法
2619
查看次数

如何在 CMake 中使用特定的链接脚本(*.lds)?

我正在尝试使用 CMake 编写一个裸机程序(我的项目位于https://github.com/oska874/cmake_test)。演示源代码如下:

我的C

void mymain(void)
{
    int a=0;
    a++;
    a++;
}
Run Code Online (Sandbox Code Playgroud)

和链接脚本文件是:

我的.lds

ENTRY(mymain)
SECTIONS
{   
   . = 0x10000;
   .text : { *(.text) }
   . = 0x8000000;
   .data : { *(.data) }
   .bss : { *(.bss) }
}
Run Code Online (Sandbox Code Playgroud)

我可以用下面的命令编译它:

gcc -c my.c
ld -T my.lds -o my my.o
Run Code Online (Sandbox Code Playgroud)

但我不知道如何用 CMake 做同样的事情,因为 cmake 总是使用它自己的 .lds 脚本。

我尝试搜索 google 和 stackoverflow,但所有方法都失败了。

/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
Run Code Online (Sandbox Code Playgroud)

我试过 CMakeLists.txt 如下:

PROJECT(FreeRtos)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

set(CMAKE_EXE_LINKER_FLAGS_DEBUG " -T …
Run Code Online (Sandbox Code Playgroud)

c linux makefile cmake ld

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

是否可以使用黄金链接器编译和链接Clang/LLVM?

我正在为LLVM/Clang编写自定义传递,重新编译往往需要一段时间并使用大量内存.我听说黄金链接器(1)花费的时间更少,(2)使用的内存比标准的ld链接器少.

有没有办法将标志传递到LLVM/Clang构建过程并更改为黄金链接器?根据这个答案,我一直在尝试使用覆盖文件,但我似乎没有取得很大的成功.

我还要注意到我正在使用Clang 3.9编译最新的Clang/LLVM版本(4.0); 如果有必要,我不介意切换回GCC,而是宁愿避免它.

cmake llvm clang llvm-clang gold-linker

3
推荐指数
1
解决办法
3131
查看次数

CMake 3.8.0在makefile中生成错误的链接命令

问题:

运行cmake生成带有STATIC库的项目后,ninja和mingw32-make都无法在链接时生成目标.对于SHARED库或可执行文件,这个设置工作正常.我试过这个"Ninja"和"MinGW Makefiles"发生器:

忍者输出:

[2/2] Linking CXX static library hello_wsl.lib
FAILED: hello_wsl.lib
cmd.exe /C "cd . && "C:\Program Files\CMake\bin\cmake.exe" -E remove hello_wsl.lib && "" qc hello_wsl.lib  CMakeFiles/hello_wsl.dir/lib_hello_world.cpp.obj && cd ."
"""" no se reconoce como un comando interno o externo,
programa o archivo por lotes ejecutable.
ninja: build stopped: subcommand failed.
Run Code Online (Sandbox Code Playgroud)

mingw32-make输出:

Scanning dependencies of target hello_wsl
[ 50%] Building CXX object CMakeFiles/hello_wsl.dir/lib_hello_world.cpp.obj
[100%] Linking CXX static library hello_wsl.lib
Error running link command: El parámetro no es correcto
CMakeFiles\hello_wsl.dir\build.make:93: recipe …
Run Code Online (Sandbox Code Playgroud)

c++ cmake mingw-w64 ninja

2
推荐指数
1
解决办法
1210
查看次数

标签 统计

cmake ×6

c++ ×4

linker ×4

clang ×3

c ×2

linux ×2

llvm ×2

gcc ×1

gold-linker ×1

ld ×1

lld ×1

llvm-clang ×1

makefile ×1

mingw-w64 ×1

ninja ×1

windows ×1