我对 C++ 和犰狳很陌生,并且遇到了下面描述的构建错误。我正在尝试测试以下简单代码以将犰狳矩阵保存为 hdf5 文件:
#include <iostream>
#include <armadillo>
using namespace std;
using namespace arma;
int main()
{
mat A = randu<mat>(240,320);
A.save("A.hdf5",hdf5_binary);
return 0;
}
编译时,我收到以下错误:
/usr/include/armadillo_bits/hdf5_misc.hpp:131: undefined reference in « arma_H5T_NATIVE_DOUBLE »
/usr/include/armadillo_bits/hdf5_misc.hpp:131: undefined reference in « arma_H5Tcopy »
obj/Debug/main.o: in function « bool arma::diskio::save_hdf5_binary<double> (arma::Mat<double> const&, std::string const&) »:
/usr/include/armadillo_bits/diskio_meat.hpp:1299: undefined reference in « arma_H5Eset_auto »
/usr/include/armadillo_bits/diskio_meat.hpp:1308: undefined reference in « arma::H5check_version(unsigned int, unsigned int, unsigned int) »
/usr/include/armadillo_bits/diskio_meat.hpp:1308: undefined reference in « arma_H5Fcreate »
/usr/include/armadillo_bits/diskio_meat.hpp:1315: undefined reference in « arma_H5Screate_simple »
/usr/include/armadillo_bits/diskio_meat.hpp:1324: undefined reference in « arma_H5Dcreate »
/usr/include/armadillo_bits/diskio_meat.hpp:1330: undefined reference in « arma_H5Dwrite »
/usr/include/armadillo_bits/diskio_meat.hpp:1333: undefined reference in « arma_H5Dclose »
/usr/include/armadillo_bits/diskio_meat.hpp:1334: undefined reference in « arma_H5Tclose »
/usr/include/armadillo_bits/diskio_meat.hpp:1335: undefined reference in « arma_H5Sclose »
/usr/include/armadillo_bits/diskio_meat.hpp:1336: undefined reference in « arma_H5Fclose »
编译指令如下:
g++ -Wall -fexceptions -O2 -g -larmadillo -lhdf5 -c main.cpp -o main
我正在 Linux Fedora 20 系统上使用 CodeBlocks。我有打包好的 HDF5-devel,可以在中找到 hdf5.h/usr/include/
我还使用以下命令在犰狳中激活了 hdf5#define ARMA_USE_HDF5
in config.hpp
。我使用最新版本的犰狳(4.450)和gcc 4.8.3。
我错过了链接吗?对我来说,添加 -larmadillo 和 -lhdf5 (如犰狳用户指南中所述)应该足够了。有什么线索吗?
谢谢
由于基于 Linux 的系统上不同版本的 HDF5 库存在各种问题,Armadillo 的作者禁用了 HDF5 库的自动检测。如果您想将 HDF5 与犰狳一起使用,有两种选择:
1.
解压armadillo .tar.gz包,并编辑CMakeLists.txt文件。取消注释第 231 至 238 行,从以下内容开始find_package(HDF5)
(即删除 # 字符)。修改 CMakeLists.txt 后,按照 README.txt 文件中的说明运行基于 cmake 的安装。
OR
2.
正常安装犰狳(不修改 CMakeLists.txt),然后使用以下命令编译程序(全部在一行):
g++ main.cpp -o main -O2 -DARMA_DONT_USE_WRAPPER -DARMA_USE_BLAS -DARMA_USE_LAPACK -DARMA_USE_HDF5 -lblas -llapack -lhdf5
奖励积分:
如果你有高速OpenBLAS已安装库并希望犰狳使用它而不是标准 BLAS,请更改-lblas
to -lopenblas
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)