我一直在試圖安裝Assimp 3.0
最近要從Blender
加載模型以便在OpenGL
中使用。Assimp鏈接器錯誤 - 未定義的引用
我的項目是在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
正在正確使用,但由於某種原因,儘管我可以打印出我鏈接的.lib
文件的確切路徑,但它或者不是'實際上鍊接,或者我連接錯誤的東西。
有誰知道我爲什麼看到這些鏈接器錯誤?
我需要鏈接不同的文件嗎?或者我可能需要按特定順序鏈接它?
任何幫助將不勝感激,因爲我看不出我做錯了什麼。
如果需要更多信息,請留下評論,我會盡快編輯問題。
你好嗎?您是否檢查過鏈接命令中列出了C:/lib/assimp/3.0/lib/assimp_release-dll_win32/assimp.lib? – Fraser 2013-04-12 01:29:13
@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無法識別)。 – 2013-04-12 04:38:10
我不太熟悉MinGW我很害怕。只是建議嘗試鏈接assimp以防萬一其他庫中有一個作爲依賴項,只要將'target_link_libraries($ {EXE} $ {ASSIMP_LIBRARY})'移動到所有'target_link_libraries'調用的末尾即可。 – Fraser 2013-04-12 04:50:02