c – CMake无法链接
我的C项目有一个CMakeLists.txt,可以在
Windows上使用MSVC,在
Linux上使用gcc.我也试图在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? 解决方法
问题是Windows,而不是编译器和CMake.您可以阅读有关它的更多信息
here,但它的要点是Windows命令行中有8192个字符限制.基本上你不能运行超过8192个字符的任何命令. CMake尝试执行的链接命令有11353个字符,这就是它失败的原因.
解决方案是使用不同的shell.如博客文章中所述,您可以从sourceforge下载GNU ARM Eclipse构建工具. 下载并安装后,只需将make.exe和sh.exe从< Installation-Path> / bin复制到工具链的任何地方,并像老板一样链接! 我尝试过不同的编译器,qnx – gcc – 交叉gcc,它完美无缺. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |