CMake+MinGW编译Assimp添加/bigobj提示无此文件或目录如何解决
错误原因
你使用的/bigobj是MSVC编译器专属的大对象文件编译参数,MinGW使用的GCC编译器不识别该格式参数,所以会抛出/bigobj: No such file or directory错误。
解决方法
方案1:使用MinGW对应大对象编译参数
MinGW环境下对应大对象文件的编译参数为-Wa,-mbig-obj,CMake中正确的配置写法如下:
# 全局生效配置 if(MINGW) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wa,-mbig-obj") endif()
如果只需要给assimp目标添加该参数,更干净的写法是:
# 仅对assimp目标生效 if(MINGW) target_compile_options(assimp PRIVATE -Wa,-mbig-obj) endif()
注意:不要使用
add_definitions添加编译选项,该指令的作用是添加预处理器定义,本身就不适合用来传递编译参数。
方案2:关闭不需要的Assimp导入模块(更推荐)
你遇到的超大obj文件是Assimp的IFC格式导入模块生成的,如果你不需要支持IFC格式模型,直接关闭该模块即可从根源解决问题,不需要添加任何额外编译参数,CMake配置如下:
set(ASSIMP_BUILD_IFC_IMPORTER OFF CACHE BOOL "关闭IFC格式导入支持" FORCE)
额外注意事项
- 如果是32位MinGW编译仍然报错,可尝试升级MinGW版本到8.1.0以上,旧版本GCC对
-mbig-obj的支持存在缺陷。 - 配置完成后需要删除CMake缓存重新生成编译脚本,避免旧配置残留。
内容的提问来源于stack exchange,提问作者Extorc Productions
相关产品推荐
相关产品推荐

