CMake无法链接

时间:2016-08-23 09:30:55

标签: c++ eclipse cmake

我的CMakeLists.txt项目C++在Windows上使用MSVC,在gcc的Linux上完美运行。我也试图在Windows for 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时,我可以看到它抱怨它无法找到的目标文件。它就在那里。

我一直在使用这个交叉编译器,我确信它运行正常。我实际上是在没有CMake的情况下使用Eclipse内部构建器使用相同的交叉编译器构建相同的项目。所以问题不应该在交叉编译器本身。

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

1 个答案:

答案 0 :(得分:0)

问题是Windows,而不是编译器和CMake。您可以阅读有关它的更多信息here,但其中的要点是Windows命令行中有8192个字符限制。基本上你不能运行超过8192个字符的任何命令。 CMake尝试执行的链接命令有11353个字符,这就是它失败的原因。

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

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

我已尝试使用不同的编译器qnx - gcc - cross gcc,并且它完美无缺。