天天看點

windows下使用CMake對hdf5 的安裝與測試1.win10 的安裝:

文章目錄

  • 1.win10 的安裝:
    • 1.1參考網站:
    • 1.2安裝過程
      • 1.2.1 下載下傳
      • 1.2.2 安裝過程

1.win10 的安裝:

1.1參考網站:

  1. 參考1
  2. 參考2
  3. 參考3

1.2安裝過程

1.2.1 下載下傳

  • 一共下載下傳了兩個版本(1.8.21和1.10.5,其中1.10.5是選擇的CMake Versions)的hdf5,每個版本均下載下傳了2個壓縮包(.zip和.tar.gz,其實隻要下其中一個就可以),放在這裡;
  • 最後選擇安裝1.10.5,解壓CMake-hdf5-1.10.5.zip。

1.2.2 安裝過程

主要參考的這裡和這裡,使用的CMake安裝包,當時的CMake是3.14版本。過程如下:

  1. 前期準備
    • 下載下傳并解壓CMake-hdf5-1.10.5.zip;
    • 解壓 SZip.tar.gz 和 ZLib.tar.gz
    • CMake解除安裝更新到3.14版本(因為要求最低版本是3.10),安裝後重新開機電腦;
    • 目錄中不能有空格和中文,會導緻安裝失敗;
    • (可選項)安裝NSIS(用于生成.exe)或者WiX(用于生成.msi),最後自己在執行.bat過程中安裝了NSIS,但最後好像沒有生成.exe,但是不影響;
  2. 開始編輯建構
    • 指令行中進入解壓後的檔案夾(.bat所在檔案夾);
    • 在指令行中執行 build-VS2013-64.bat (直接拖動到指令行即可),因為本破船是64位win10,常用vs2013,是以選擇了這個;如果後面還要32位的,同理操作build-VS2013-32.bat即可
    • 在指令行中執行的結果如下面3圖,這個過程還是需要一些時間。
      windows下使用CMake對hdf5 的安裝與測試1.win10 的安裝:
      windows下使用CMake對hdf5 的安裝與測試1.win10 的安裝:
      windows下使用CMake對hdf5 的安裝與測試1.win10 的安裝:
  3. 編輯結果
    • 多了一個build檔案夾和一個

      HDF5-1.10.5-win64.zip

      檔案,如果提前安裝了NSIS,應該是還有一個

      HDF5-1.10.5-win64.exe

      檔案,我這裡沒有.exe檔案但不影響使用,結果如下圖;
      windows下使用CMake對hdf5 的安裝與測試1.win10 的安裝:
    • 解壓

      HDF5-1.10.5-win64.zip

      檔案,可得到如下圖的檔案夾,所有的頭檔案和依賴庫都在裡面了;
      windows下使用CMake對hdf5 的安裝與測試1.win10 的安裝:
  4. 配置
    • 系統環境變量:将HDF5安裝目錄下的bin檔案夾位址添加到系統的PATH變量中,這裡是将

      E:\software_install\hdf5\1.10.5\CMake-hdf5-1.10.5\HDF5-1.10.5-win64\bin

      添加到PATH中去;
    • visual studio 2013 的配置(最後的配置檔案在這裡):
      • 在附加包含目錄中添加

        E:\software_install\hdf5\1.10.5\CMake-hdf5-1.10.5\HDF5-1.10.5-win64\include

      • 在附加庫目錄中添加

        E:\software_install\hdf5\1.10.5\CMake-hdf5-1.10.5\HDF5-1.10.5-win64\lib

      • 在附加依賴項中一共有2種添加方式(不能同時将兩者的.lib添加進去,否則出現過定義問題):
        • a.動态連結方式: 在附加依賴項加入

          szip.lib;zlib.lib;hdf5.lib;hdf5_cpp.lib

          ,還需要在

          [通用屬性]->[C/C++]->[預處理器]

          中添加

          H5_BUILT_AS_DYNAMIC_LIB

          ,如果不加就會出現以下問題;
        1>test.obj : error LNK2001: 無法解析的外部符号 H5T_STD_I32LE_g
        1>test.obj : error LNK2001: 無法解析的外部符号 H5T_NATIVE_INT_g
                   
        • b.靜态連結方式: 在附加依賴項加入

          libszip.lib;libzlib.lib;libhdf5.lib;libhdf5_cpp.lib

          。千萬不要再在

          [通用屬性]->[C/C++]->[預處理器]

          中添加

          H5_BUILT_AS_DYNAMIC_LIB

          ,否則也會出現問題:

          error LNK2019: 無法解析的外部符号 __imp_H5open,該符号在函數 main 中被引用

  5. debug問題

    測試代碼如下:

#include <hdf5.h>
int main(){
	// hid_t是HDF5對象id通用資料類型,每個id标志一個HDF5對象
	hid_t file_id;
	// herr_t是HDF5報錯和狀态的通用資料類型
	herr_t status;
	// 檔案id = H5Fcreate(const char *檔案名,
	//                   unsigned 是否覆寫的flags,
	//                     - H5F_ACC_TRUNC->能覆寫
	//                     - H5F_ACC_EXCL->不能覆寫,報錯
	//                   hid_t 建立性質,hid_t 通路性質);
	file_id = H5Fcreate("file.h5", H5F_ACC_TRUNC,
		H5P_DEFAULT, H5P_DEFAULT);
	status = H5Fclose(file_id);

	// 打開剛建立的HDF檔案并關閉
	// 檔案id = H5Fopen(const char *檔案名, 
	//                  unsigned 讀寫flags,
	//                    - H5F_ACC_RDWR可讀寫
	//                    - H5F_ACC_RDONLY隻讀 
	//                  hid_t 通路性質)
	hid_t file_open_id;
	file_open_id = H5Fopen("file.h5", H5F_ACC_RDWR, H5P_DEFAULT);
	status = H5Fclose(file_open_id);

	return 0;
}
           

1.當使用動态連結庫的方式時(靜态的沒事),出現問題如下: 頭檔案(1.10.5)和動态庫(1.10.2)的版本沒有對應上,猜測可能的原因為:1、之前在anaconda中安裝過hdf5,可能和現在的版本不對應;2、之前安裝pcl庫,這個庫要調用vtk庫和flann庫,這兩個庫中好像也有hdf5的動态庫,是以系統自動比對到那裡去了;解決方法: 參考部落格,對項目的動态庫靜态加載時指定動态庫位置,在

屬性頁 -> 通用屬性 -> 調試 -> 環境

中加入

path=E:\software_install\hdf5\1.10.5\CMake-hdf5-1.10.5\HDF5-1.10.5-win64\bin;$(Path)

,用來指定動态庫在

hdf5的動态庫bin

中尋找;

Warning! ***HDF5 library version mismatched error***
	The HDF5 header files used to compile this application do not match
	the version used by the HDF5 library to which this application is linked.
	Data corruption or segmentation faults may occur if the application continues.
	This can happen when an application was compiled by one version of HDF5 but
	linked with a different version of static or shared HDF5 library.
	You should recompile the application or check your shared library related
	settings such as 'LD_LIBRARY_PATH'.
	You can, at your own risk, disable this warning by setting the environment
	variable 'HDF5_DISABLE_VERSION_CHECK' to a value of '1'.
	Setting it to 2 or higher will suppress the warning messages totally.
	Headers are 1.10.5, library is 1.10.2
	```
           

繼續閱讀