我最近一直在尝试安装Assimp 3.0
来加载Blender
中的模型,以便在OpenGL
中使用。
我的项目是在Sublime Text 3
中设置的,因此我创建了CMake
个文件,以便为我生成所需的make
文件来构建我的项目。
我正在使用的所有其他库,例如SFML
,都被包含在内并且链接正常,但由于某些原因,Assimp
无效。
在构建时,我收到以下链接器错误:
undefined reference to `Assimp::Importer::Importer()
undefined reference to `Assimp::Importer::~Importer()
undefined reference to `Assimp::Importer::~Importer()
由于这是一个链接器错误,我假设我的问题出在我的CMake
文件中。
我创建了一个FindASSIMP.cmake
文件来为我设置一些变量,包含正确的include目录和需要链接的.lib
文件的路径,我可以看到它工作正常,因为我可以打印生成的变量并获得预期的输出。
我有两个变量${ASSIMP_INCLUDE_DIR}
和${ASSIMP_LIBRARY}
。
在release
版本中:
${ASSIMP_INCLUDE_DIR} = C:/lib/assimp/3.0/include
${ASSIMP_LIBRARY} = C:/lib/assimp/3.0/lib/assimp_release-dll_win32/assimp.lib
我的主要CMake
文件将所有内容组合在一起就像这样(有很多不相关的内容被删除):
set(EXE "main")
# Add sub-directories to create libraries from my files
add_subdirectory(various_sub_dirs)
add_executable(${EXE} my_sources.cpp)
# Link up my sub-directory libraries
target_link_libraries(${EXE} various_libraries_from_my_code)
# Link up external libraries
target_link_libraries(${EXE} ${ASSIMP_LIBRARY})
target_link_libraries(${EXE} ${GLEW_LIBRARIES})
target_link_libraries(${EXE} ${GLUT_LIBRARY})
target_link_libraries(${EXE} ${OPENGL_LIBRARIES})
# etc...
我没有收到任何include
错误,因此我知道正确使用了inlcude directory
,但出于某种原因,即使我可以打印出{{1}的确切路径我正在链接,它要么实际上没有链接,要么我正在连接错误的东西。
有人知道为什么我会看到这些链接器错误吗?
我是否需要链接其他文件?或者我可能需要按特定顺序链接它?
任何帮助都会受到赞赏,因为我看不出我做错了什么。
如果需要更多信息,请发表评论,我会尽快编辑问题。
答案 0 :(得分:2)
问题出在Assimp 3.0完整下载的预编译库中。
我使用CMake和Make自己编译Assimp库,现在它没有任何问题。