VScode踩坑记录-CMake编译中的报错及解决

#书接上回,自解决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是“一个快速的构建系统,专为加速软件项目的构建而设计。”可以显示很多报错和编译进度,但我没有装。将左下角选择其他工具包即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值