【发布时间】:2013-04-04 04:11:59
【问题描述】:
我最近一直在尝试安装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 文件来为我设置一些变量,其中包含正确的包含目录和需要链接的.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 使用正确,但出于某种原因,即使我可以打印出我正在链接的.lib 文件的确切路径,它要么实际上没有链接,要么我链接了错误的东西。
有人知道我为什么会看到这些链接器错误吗?
我需要链接不同的文件吗?或者我可能需要按特定顺序链接它?
任何帮助将不胜感激,因为我看不出我做错了什么。
如果需要更多信息,请发表评论,我会尽快编辑问题。
【问题讨论】:
-
你是如何构建这个的?您是否检查过链接命令中是否列出了 C:/lib/assimp/3.0/lib/assimp_release-dll_win32/assimp.lib?
-
@Fraser 我正在通过使用 CMake 生成的 make 文件在 Windows 7 上使用 MinGW 进行构建。我刚刚为 make 命令打开了 VERBOSE=1,我可以看到 .lib 文件的路径包含在与 g++ 的链接阶段。我可以看到的输出基本上是这样的(...是我省略的地方):“C:\mingw_path\g++.exe -std=c++11 -Wall ... -o C:\bin_path\main. exe ... C:\lib\assimp\3.0\lib\assimp_release-dll_win32\assimp.lib ..."。我曾尝试使用 assimp.lib、Assimp32.dll 和 Assimp64.dll 文件,但它们都给出相同的结果(实际上 x64 dll 无法识别)。
-
恐怕我对MinGW不太熟悉。我唯一的建议是尝试最后链接 assimp,以防其他库之一将其作为依赖项。只需尝试将
target_link_libraries(${EXE} ${ASSIMP_LIBRARY})移动到所有target_link_libraries调用的末尾即可。 -
@Fraser 谢谢你的时间,但似乎问题出在下载附带的预编译文件上。我刚刚用 CMake 和 Make 自己编译了库文件,然后使用了这些文件,现在它可以正常工作了。
标签: c++ build linker cmake assimp