我为我的C++项目准备了一个CMakeLists.txt,它在使用MSVC的Windows上和使用gcc的Linux上都能完美地工作。我也在尝试使用相同的文件在Windows for Linux上进行交叉编译。
我使用Eclipse CDT4 - Unix Makefiles作为生成器在Eclipse中创建一个make file项目。为了使用交叉编译器,我创建了以下工具链文件
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进行链接是正常的吗
发布于 2016-09-20 11:07:28
问题出在Windows,而不是编译器或CMake。你可以阅读更多关于它的here,但是它的要点是在Windows命令行中有8192个字符的限制。基本上,您不能运行超过8192个字符的任何命令。CMake试图执行的link命令有11353个字符,这就是它失败并返回该错误的原因。
解决方案是使用不同的shell。正如博客中提到的,您可以从sourceforge下载GNU ARM Eclipse构建工具。
下载并安装后,只需将make.exe和sh.exe从<Installation-Path>/bin复制到您的工具链所在的位置,并像老板一样链接!
我尝试过用不同的编译器,qnx - gcc - cross gcc,它工作得很好。
https://stackoverflow.com/questions/39097452
复制相似问题