2016-11-16 1 views
0

私のCMAKEスクリプトでfind_package(HDF5 COMPONENTS CXX REQUIRED)を使用してインクルードディレクトリとライブラリをロードします。 Cakeは私に言いますCmakeはhdf5を見つけても、ウィンドウ上で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 

質問:が、これはFindHDFのバグですか、私は直接、すなわちに、dllファイルに対しての代わりに、別のフォルダにあるlibファイルにリンク何か間違って設定してください

答えて

1

私はhdf5をしばらく使用していませんが、libの代わりにdllをリンクさせるバグがあることを思い出してください。 手動で 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 など(いずれかのコマンドラインにcmakeの-D方法を経由して、またはcmakeののGUIを介して)設定する必要があります - 彼らは、ライブラリを変更する(あるいは単に 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名 - 正しいかどうかを確認するために使用されているものをチェックする - 私はこれをメモリからやっているので間違えたかもしれない)

EDIT: libsを指定するオプションが問題あなたのhdf5ライブラリがcmakeによって生成されたmakefilesetcを使用してコンパイルされた場合、FindPackage(HDF5 NO_MODULE)を使用するオプションがあります。 NO_MODULEを使用する場合、findパッケージスクリプトはfindhdf5.cmakeスクリプトをバイパスし、hdf5 build/installフォルダーの関連サブディレクトリーに置かれているHDF5Config.cmakeまたはhdf5-config.cmakeファイルを探します。

これは、クロスプラットフォームフレンドリーで、すべての新しいHDF5のバージョンでサポートされています - 彼らはcmakeのを使用して構築して./configureをされていない提供...

+0

フム、このcmakeのスクリプトが想定しているとして、これは、良いオプションではありませんさまざまなプラットフォームで動作するようにしたいと思っています。プラットフォーム固有のもので多くのケースを書くのは避けたいと思います。これが既知のバグである場合、なぜこれが修正されていないのだろうか。 – NOhs

+0

ここに問題があるので、それに従って解決しているかどうかを確認してください。https://gitlab.kitware.com/cmake/cmake/issues/16534 – NOhs

+0

パスのマニュアル仕様については、おそらくパスのスペースのため引用符を使用します。 – NOhs

関連する問題