如何避免HDF5动态库冲突

文/fasiondog

之前在 Python 中同时使用 Hikyuu 和 PyTables 时,总是会报 “DLL load failed 找不到动态库” ,导致无法同时导入 hikyuu 和 tables。一番查找后,确定原因是两者都同时使用了 hdf5.dll,但 hdf5 的版本不同,导致 python 报错。解决思路:一是采用静态链接,一是改变动态库的名称。尝试了静态链接总是报错,于是走第二天路,但如果直接更改 hdf5.dll、hdf5.lib 的名称仍会导致链接失败。没办法仔细研究了下 CMake-hdf5-1.10.4 的编译,终于发现在其子目录 hdf5-1.10.4 下的 CMakeList.txt 里有一句不太起眼的注释,原来可以通过设置 HDF5_EXTERNAL_LIB_PREFIX 在编译 HDF5 的过程中自定义动态库前缀来避免冲突,详见下图:

Now,重新编译后,Hikyuu 使用 hku_hdf5.dll,这样完美避免以后出现和其他使用 HDF5 的 python 库出现冲突。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注