2016-11-16 32 views
0

我在我的CMAKE腳本中使用find_package(HDF5 COMPONENTS CXX REQUIRED)加載包含目錄和庫。 Cmake告訴我Cmake發現hdf5,但試圖鏈接到Windows上的DLL

Found HDF5: C:/Program Files/HDF_Group/HDF5/1.10.0/bin/hdf5_cpp.dll (found version "1.10.0") found components: CXX 

並生成我的visual studio解決方案。 我也使用存儲在${HDF5_LIBRARIES} ${HDF5_CXX_LIBRARIES}我的目標庫,但是當我建,我得到一個鏈接錯誤LNK1107說,對於文件hdf5_cpp.dll

invalid or corrupt file: cannot read at 0x380 

我認爲這是由於這一事實,即visual studio試圖

C:\Program Files\HDF_Group\HDF5\1.10.0\lib 

問題:直接對dll文件對lib文件,該文件是在另一個文件夾,即鏈接,而不是這是FindHDF的錯誤還是我配置錯誤?

回答

1

我有一段時間沒有在Windows上使用hdf5,但我記得有一個錯誤導致它鏈接到dll而不是lib。 你應該手動設置(可以通過命令行的cmake -D方法,或通過CMake的GUI) HDF5_hdf5_LIBRARY=C:\Program Files\HDF_Group\HDF5\1.10.0\lib\libhdf5.lib HDF5_hdf5_cpp_LIBRARY=C:\Program Files\HDF_Group\HDF5\1.10.0\lib\libhdf5_cpp.lib 等 - 或者只是 HDF5_LIBRARY=C:\Program Files\HDF_Group\HDF5\1.10.0\lib\libhdf5.lib HDF5_cpp_LIBRARY=C:\Program Files\HDF_Group\HDF5\1.10.0\lib\libhdf5_cpp.lib 取決於你是否有FindHDF5的舊的或更新的版本(他們改變了庫更新版本中的var名稱 - 檢查用於確保你正確的 - 我從內存中這樣做,所以可能犯了一個錯誤)

編輯: 如果手動指定庫的選項是一個問題,如果你的hdf5庫是使用cmake生成的makefilesetc編譯的,那麼可以選擇使用FindPackage(HDF5 NO_MODULE)。 使用NO_MODULE時,find包腳本將繞過findhdf5.cmake腳本,查找放置在hdf5 build/install folfer的相關子目錄中的HDF5Config.cmake或hdf5-config.cmake文件。

這是跨平臺的友好,爲所有新版本的HDF5支持 - 只要他們使用cmake並沒有運行./configure建...

+0

嗯,這是不是一個好的選擇,因爲這CMake的腳本應該在不同的平臺上運行,並且我希望避免在平臺特定的情況下編寫大量的案例。我想知道爲什麼這不是固定的,如果這是一個已知的錯誤。 – NOhs

+0

對於那些想要遵循它並查看它是否已解決的問題,請參閱以下問題:https://gitlab.kitware.com/cmake/cmake/issues/16534 – NOhs

+0

而對於手動指定路徑,應該可能由於路徑中的空格而使用引號。 – NOhs