CMake链接失败

CMake fails in linking

本文关键字:失败 链接 CMake      更新时间:2023-10-16

我有一个CMakeLists.txt用于我的C++项目,它在Windows上使用MSVC完美工作,在Linux上使用gcc。我也试图使用相同的文件在Windows上交叉编译Linux。

我使用Eclipse CDT4 - Unix Makefiles作为生成器在Eclipse中创建make文件项目。为了使用交叉编译器,我创建了以下工具链文件

set(CMAKE_SYSTEM_NAME Linux)
set(TOOL_CHAIN_ROOT "C:/mgc/embedded/codebench")
# specify the cross compiler
set(CMAKE_C_COMPILER   ${TOOL_CHAIN_ROOT}/bin/x86_64-amd-linux-gnu-gcc.exe)
set(CMAKE_CXX_COMPILER ${TOOL_CHAIN_ROOT}/bin/x86_64-amd-linux-gnu-g++.exe)
set(_ECLIPSE_VERSION "4.5")

,这就是我如何生成项目文件

cmake -G"Eclipse CDT4 - Unix Makefiles" -DCMAKE_TOOLCHAIN_FILE=../Source/cross-tool.cmake ../Source`
我在这里没有任何问题。我甚至可以用 编译源文件
cmake --build .

项目开始编译,但在最后,当它试图链接时,它失败了,出现以下错误:

[100%] Linking CXX executable crossProject
x86_64-amd-linux-gnu-g++.exe: error: CMakeFiles/crossProject.dir/Path/To/ObjectFile.cpp.o: No such file or directory
make.exe[2]: *** [crossProject] Error 1
make.exe[1]: *** [CMakeFiles/crossProject.dir/all] Error 2
make.exe: *** [all] Error 2

但是当我检查CMakeFiles/crossProject.dir时,我可以看到它抱怨找不到的对象文件。就在那儿。

我已经使用这个交叉编译器一段时间了,我确信它工作正常。实际上,我正在使用相同的交叉编译器与Eclipse内部构建器构建相同的项目,而没有CMake。所以问题不应该出在交叉编译器本身。

使用x86_64-amd-linux-gnu-g++.exe而不是x86_64-amd-linux-gnu-ld.exe链接是正常的吗?

问题在于Windows,而不是编译器或CMake。你可以在这里读到更多关于它的内容,但它的要点是在Windows命令行中有8192个字符的限制。基本上,您不能运行任何超过8192个字符的命令。CMake试图执行的链接命令有11353个字符,这就是它失败的原因。

解决方案是使用不同的shell。正如博客文章中提到的,您可以从sourceforge下载GNU ARM Eclipse构建工具。

一旦下载并安装,只需将make.exesh.exe<Installation-Path>/bin复制到您的工具链所在的任何地方,并像老板一样链接!

我已经尝试过不同的编译器,qnx - gcc - cross gcc和它的工作完美。

相关文章: