在CLion中使用assimp遇函数未定义引用错误求助
错误信息
undefined reference to 'Assimp::Importer::ReadFile(char const*, unsigned int)'
当前CMake配置
find_package(assimp REQUIRED) target_link_libraries(${PROJECT_NAME} assimp::assimp)
环境背景
Windows系统下使用CLion开发,通过vcpkg安装Assimp库,尝试过MinGW 6.0和11.0版本均未解决问题。
解决方案
匹配vcpkg triplet与编译器版本
确保vcpkg安装Assimp时使用的triplet与CLion当前调用的MinGW架构、编译类型完全一致。例如64位MinGW对应x64-mingw-static或x64-mingw-dynamic,32位对应x86-mingw-static/x86-mingw-dynamic。可通过指定triplet重新安装:# 以64位静态编译为例 vcpkg install assimp:x64-mingw-static同时在CLion的CMake配置中指定vcpkg工具链文件:进入
Settings -> Build, Execution, Deployment -> CMake,在CMake options中添加:-DCMAKE_TOOLCHAIN_FILE=[你的vcpkg根路径]/scripts/buildsystems/vcpkg.cmake统一项目与库的编译类型
若项目为静态编译,确保vcpkg安装的是静态版Assimp;若为动态编译则对应动态版。安装时可明确指定:# 静态版 vcpkg install assimp:x64-mingw-static # 动态版 vcpkg install assimp:x64-mingw-dynamic检查项目CMake配置,避免
BUILD_SHARED_LIBS等选项与Assimp的编译类型冲突。清理CMake缓存并重建
删除项目目录下的cmake-build-*文件夹,或在CLion中点击File -> Reload CMake Project,彻底清理旧缓存后重新构建项目。手动指定库路径(备选方案)
若自动链接失效,可手动指定Assimp的头文件路径和库文件:# 替换为你的vcpkg安装路径 set(ASSIMP_INCLUDE_DIR "[vcpkg路径]/installed/x64-mingw-static/include") set(ASSIMP_LIBRARY "[vcpkg路径]/installed/x64-mingw-static/lib/libassimp.a") include_directories(${ASSIMP_INCLUDE_DIR}) target_link_libraries(${PROJECT_NAME} ${ASSIMP_LIBRARY})根据实际triplet和编译类型调整路径中的
x64-mingw-static,以及库文件后缀(静态库为.a,动态库为.dll.a)。
内容的提问来源于stack exchange,提问作者Wizzy

