2017-10-11 3 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와 인터페이스 일식 경험을 가지고 있습니까?

난 단지 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를 사용하는 것에 대해 이야기하는 리소스가 없으므로이 질문에 직접 답할 것입니다.

1 -MinGW GCC 컴파일러

프로그래밍 -eclipse CDT 네온 - 윈도우 7 엔터프라이즈 -C++)은 관리자 privelages에 로그인 한 일정 확인 : 다음과 같이 사용 HDF5를 설치하기위한

지침입니다. MinGW와 MSYS 및 HDF5는 관리자 권한없이 올바르게 설치되지 않을 수 있습니다.

2) HDF5 버전 1.8.2를 다운로드하십시오. 이 URL은 다음 URL을 통해 제공됩니다. https://support.hdfgroup.org/ftp/HDF5/prev-releases/hdf5-1.8/hdf5-1.8.2/src/ .tar 버전을 가져와야합니다. 이 폴더에는 소스 코드 만 포함되어 있으며, 앞으로도 계속 편집해야합니다.

tarball의 압축을 풀고 쉽게 찾을 수있는 디렉토리로 이동하십시오. 내 문서는 "MyHDFstuff"라는 레이블이 붙어 있으며 "Documents"폴더에 있습니다. tarball이 압축 해제 된 후 H5pubconf.h라는 이름의 모든 파일을 찾아 프로그램 끝에 다음 행을 추가하십시오. 두 개의 H5pubconf.h 파일이 있어야합니다. 하나는/src/폴더에, 다른 하나는/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) 이클립스 프로젝트 설정에서 다음과 같이 변경하십시오. - 포함 경로에 "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++ 프로그램 및 출력 파일을 첨부합니다!