2017-10-11 20 views
0

現在のフォーマットである.CSVではなく、.hdf5フォーマットの出力ファイルを吐き出すために、大規模なオール風洞シミュレーションを編集しようとしています。HDF5 + Eclipse CDTエラー

現在、シミュレーション全体がEclipse CDT上で実行され、WindowsとLinuxプラットフォームの組み合わせでMinGW g ++を使用して&がリンクされています。私はWindows 7 Enterpriseデバイスを使用しています。私の仕事は、シミュレーションのソースコードのいくつかの行を編集してHDF5形式のファイルを出力することです。

問題は、「定義されていない参照」エラーがなくてもリンクすることができません。私はWindows用のHDF5 1.8.19ディストリビューションを使い始めましたが、含まれている.lib + .dllファイルは特にMSVS2013コンパイラ用に設計されています。私はg ++との互換性のためにLinuxの行末を使用するように切り替えましたが、まだ多くの "未定義の参照"エラーが発生します。

私はライブラリとインクルードファイルをリンクしており、検索パスもリンクしています。問題は何らかの理由でMinGWリンカーがlibhdf5_cpp.aファイルのシンボル名を読み取ることができないようです。

どのような考えですか?誰かがHDF5とのインタフェースをeclipseに接続しようとする経験を持っていますか?

私はちょうどthisサンプルコードを実行しようとしています。

次のように

私の出力誤差は次のとおりです。一般的には

g++ "-LC:\\Users\\jk5759\\workspace\\HDF5_Test" -o HDF5_Test.exe main.o -lhdf5_cpp -static 
main.o: In function `main': 
C:\Users\jk5759\workspace\HDF5_Test\Debug/../main.cpp:14: undefined reference to `H5check_version' 
C:\Users\jk5759\workspace\HDF5_Test\Debug/../main.cpp:14: undefined reference to `H5Fcreate' 
C:\Users\jk5759\workspace\HDF5_Test\Debug/../main.cpp:17: undefined reference to `H5Fclose' 
collect2: ld returned 1 exit status 

答えて

0

、C++ライブラリを明示的になど、例外のバイナリ仕様が異なる、原因名前マングリングの問題への具体的なターゲットのコンパイラ用にビルドするためにあなたの最高の持っていますおそらく、MinGWを使ってソースからHDF5ライブラリをビルドして使用することになるでしょう。

も参照してください。here(MinGWドキュメント)

0

本当にHDF5 + Windows + MinGW GCC + Eclipseを使用しているかについて実際に話しているウェブ上のリソースはないので、私はこの質問に自分自身で答えるつもりです。以下で使用するためにHDF5をインストールするための

指示: -Eclipse CDTネオン -Windows 7エンタープライズ -C++プログラミング -MinGW GCCコンパイラ

1)を使用すると、管理者privelagesでログインしている特定してください。 MinGWとMSYS、およびHDF5は、管理者権限なしで正しくインストールされないことがあります。

2)HDF5バージョン1.8.2を入手してください。これは、次のURLから入手できます。https://support.hdfgroup.org/ftp/HDF5/prev-releases/hdf5-1.8/hdf5-1.8.2/src/ .tarバージョンを取得してください。このフォルダにはソースコードのみが含まれていますが、今後も編集する必要があります。

タールボールをアンパックして、簡単に見つけやすいディレクトリに移動します。鉱山は "MyHDFstuff"というラベルが付けられており、 "Documents"フォルダにあります。 tarballを解凍したら、H5pubconf.hという名前のファイルをすべて見つけて、プログラムの最後に次の行を追加します。 /src /フォルダに/ htpubconf.hという2つのH5pubconf.hファイルがあり、/ windows/src /フォルダー。

/* ~~~~ User Added Code ~~~~ */ 
    #ifndef H5_HAVE_WIN32_API 
    #ifdef WIN32 /* defined for all windows systems */ 
    #define H5_HAVE_WIN32_API 1 
    #endif 
    #endif 

    #ifndef H5_HAVE_MINGW 
    #ifdef __MINGW32__ /*defined for all MinGW compilers */ 
    #define H5_HAVE_MINGW 1 
    #endif 
    #endif 

    //fixes second problem 
    #define H5_BUILT_AS_DYNAMIC_LIB 1 

3)Windows用のMSYS linuxコマンドラインエミュレータを入手してください。これは、MinGWとのインターフェースをとり、Lunixのようなユーティリティを提供するために設計されたツールです。 私たちにとって特別なのは、 "./configure"、 "make"、 "make install"コマンドです。それはここで得ることができます:http://www.mingw.org/wiki/MSYS

4)MSYSを起動します。 "cd"コマンドを使用して、MSYS内の "MyHDFstuff"フォルダに移動します。 MSYSプロンプトから次のコマンドを実行してください。

$ ./configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --disable-hl --prefix=$HOME 
    $ make 
    $ make check 
    $ make install 

これにより、MinGWコンパイラ用のHDF5ライブラリが構築されます。エラーが発生するはずです。無視して、コードのコンパイルと実行を停止しないでください。

5)Eclipseプロジェクトの設定で、次の変更を行います。 - "hdf5-1.8.2 \ C++ \ src"をインクルードパスに追加します。これは、ほとんどのC++ユーティリティ -add "hdf5-1.8.2 \ src"をインクルードパスに追加したものです。これは、(-l)

HDF5 Cルートユーティリティ のほとんどは、あなたのライブラリフォルダの検索パス(-L)あなたのライブラリへ -add "HDF5" に "hdf5-1.8.2 \ src.libs" -addです**これは、C++ APIインターフェイスを使用するまでには至りませんが、Cコマンド(https://support.hdfgroup.org/HDF5/doc1.8/)を使用してプログラムできるようになります。 これらの手順に従わないと、ファイル作成を含むいくつかのCインターフェイスコマンドを使用することができますが、 がデータ型インターフェイスを見つけることができないため、実行ファイルが失敗します。

***私が参照

ハッピーコーディングのために将来的には例えば、C++プログラムと出力ファイルを添付します!