2013-04-11 225 views
2

我一直在試圖安裝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文件的確切路徑,但它或者不是'實際上鍊接,或者我連接錯誤的東西。

有誰知道我爲什麼看到這些鏈接器錯誤?

我需要鏈接不同的文件嗎?或者我可能需要按特定順序鏈接它?

任何幫助將不勝感激,因爲我看不出我做錯了什麼。

如果需要更多信息,請留下評論,我會盡快編輯問題。

+0

你好嗎?您是否檢查過鏈接命令中列出了C:/lib/assimp/3.0/lib/assimp_release-dll_win32/assimp.lib? – Fraser 2013-04-12 01:29:13

+0

@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

+0

我不太熟悉MinGW我很害怕。只是建議嘗試鏈接assimp以防萬一其他庫中有一個作爲依賴項,只要將'target_link_libraries($ {EXE} $ {ASSIMP_LIBRARY})'移動到所有'target_link_libraries'調用的末尾即可。 – Fraser 2013-04-12 04:50:02

回答

2

問題出在Assimp 3.0完整下載的預編譯庫中。

我用CMake和Make來自己編譯Assimp庫,現在它工作沒有任何問題。

+1

你能詳細說明你是如何得到這個工作的嗎?當我嘗試使用CMake和VS2013編譯時,我得到具有未解決方法的.exe(使用Dependency Walker進行檢查)。 – Tetramputechture 2015-06-08 17:19:49

相關問題