#书接上回,自解决eigen库配置问题之后,马上赶来的是CMake编译中的报错。本文为个人踩坑记录,不具备通用性。
报错1:File too big/too many sections问题
这两个错误是连续出现的,无论是编译全部文件还是直接编译主程序,都出现了这个报错,并且数量很多。综合各个资料来看,问题是:
“生成的目标文件可能会变得很大,而某些编译器可能无法处理这么大的目标文件。”
如cmake:MSVC,GNU解决bigobj问题,VS code+mingw 编译问题- 知乎 等多篇文章中,给出的解决方法是:
1、在MSVC下要添加编译选项 /bigobj
2、在GNU C++下要添加编译选项 -Wa,-mbig-obj
很可惜,我没明白编译选项在哪里...
最终的解决方法
在CMakeLists加入以下代码:
# 因为大量使用模板,导致代码增大,
# MSVC下要用/bigobj选项
# GNU compiler 要用 -Wa,-mbig-obj 选项
add_executable(xxx xxx.cpp ${SRC_FILES})
target_compile_options(xxx
PRIVATE
$<$<CXX_COMPILER_ID:MSVC>:/bigobj>
$<$<CXX_COMPILER_ID:GNU>:-Wa,-mbig-obj>)
报错2:collect2.exe: error: ld returned 1 exit status
在解决上一问题后,编译至88%时会卡住,然后产生这一报错,目前看到的几个分析及解决方法:
1、 collect2.exe: error: ld returned 1 exit status分析与解决(这个目前看上去与我的最相近)
2、collect2.exe: error: ld returned 1 exit status 解决方法
3、拼写错误(这个确实,我曾经也经常拼错,但这个程序是前人写好的,应该不存在问题)
最终的解决方法
根据【1】文章的分析,查看该报错上一行,内容为:
[build] D:/Program Files/mingw/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: D:/Code/xxx/src/udp_stuff.cpp:174:(.text+0xe2d): undefined reference to
`__imp_WSACleanup
搜索 undefined reference to `__imp_WSACleanup 这一问题,如http://t.csdnimg.cn/UcP2u所说,是缺少一个库。在文件开始加入以下代码:
#pragma comment (lib,"ws2_32")
根据http://t.csdnimg.cn/EFleI,这篇的“补充:使用第三方库”内容学习,尝试解决
报错3:CMake Error: CMake was unable to find a build program corresponding to "Ninja"
CMake在Windows下运行,报错为未找到 Ninja 的程序。但如果从CMake快速入门进入,则可找到 Ninja 的程序。找到的大多数Linux的教程,有一篇Windows下的http://t.csdnimg.cn/GPc2F
查资料发现Ninja是“一个快速的构建系统,专为加速软件项目的构建而设计。”可以显示很多报错和编译进度,但我没有装。将左下角选择其他工具包即可