Mac M1设备CLion的CMake项目集成assimp报arm64链接错误如何解决
问题原因定位
你遇到的是典型的库链接缺失+架构不匹配错误,核心问题有两个:
- 你的CMakeLists.txt中仅引入了assimp的头文件目录和编译子项目,没有将assimp库链接到最终的可执行目标上
- 你手动在assimp目录执行的编译可能生成了错误架构(x86_64)的库文件,和M1设备要求的arm64架构不匹配
修复步骤
方案一:使用项目内置的assimp源码编译(推荐,适配性更高)
- 第一步:清理assimp目录的编译缓存
进入libs/thirdparty/assimp目录,删除所有编译生成的文件,包括CMakeCache.txt、CMakeFiles文件夹、libassimp.dylib等库文件、Makefile,避免旧的x86架构缓存干扰。 - 第二步:修正CMakeLists.txt配置
找到你CMake中assimp相关的代码段,修改为如下内容:set(ASSIMP_DIR ${LIB_DIR}/assimp/) # 关闭assimp不需要的编译选项,加快编译速度 set(ASSIMP_BUILD_ASSIMP_TOOLS OFF CACHE INTERNAL "Build assimp tools") set(ASSIMP_BUILD_TESTS OFF CACHE INTERNAL "Build assimp tests") set(ASSIMP_INSTALL OFF CACHE INTERNAL "Generate assimp installation target") # 指定M1架构编译 set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "Build architecture for Mac" FORCE) add_subdirectory(${ASSIMP_DIR}) target_include_directories(${PROJECT_NAME} PRIVATE ${ASSIMP_DIR}/include) # 【关键】将assimp库链接到你的项目目标 target_link_libraries(${PROJECT_NAME} assimp) - 第三步:额外补全Mac下的OpenGL链接配置
你当前的APPLE分支仅引入了OpenGL头文件,没有链接框架,找到对应代码段修改为:if(APPLE) set(OPENGL_MAC_DIR /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers/) target_include_directories(${PROJECT_NAME} PRIVATE ${OPENGL_MAC_DIR}) # 链接OpenGL框架 target_link_libraries(${PROJECT_NAME} "-framework OpenGL") else() find_package(OpenGL REQUIRED) set(LIBS OpenGL) target_include_directories(${PROJECT_NAME} PUBLIC ${LIBS}) target_link_libraries(${PROJECT_NAME} ${LIBS}) endif() - 第四步:清空项目根目录的CMake编译缓存,重新执行cmake、make命令即可。
方案二:使用Homebrew安装的assimp(更简单)
- 第一步:先执行
brew install assimp安装原生arm64架构的assimp库 - 第二步:删除CMakeLists中原来的assimp相关代码(add_subdirectory那一段),替换为如下内容:
find_package(assimp REQUIRED) target_include_directories(${PROJECT_NAME} PRIVATE ${ASSIMP_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} ${ASSIMP_LIBRARIES}) - 第三步:同样补全上面提到的Mac下OpenGL框架链接配置,清空缓存重新编译即可。
内容的提问来源于stack exchange,提问作者Lyxas
相关产品推荐
相关产品推荐

