其他分享
首页 > 其他分享> > 使用armadillo和hdf5库的简单代码的C构建错误

使用armadillo和hdf5库的简单代码的C构建错误

作者:互联网

我对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,可以在/usr/include /中找到hdf5.h
我还使用config.hpp中的#define ARMA_USE_HDF5在armadillo中激活了hdf5.我使用最新版本的armadillo(4.450)和gcc 4.8.3.

我错过了一个链接吗?对我来说,添加-larmadillo和-lhdf5(如犰狳的用户指南中所述)应该足够了.任何线索?
谢谢

解决方法:

由于基于Linux的系统上不同版本的HDF5库存在各种问题,Armadillo的作者已禁用HDF5库的自动检测.如果您想将HDF5与Armadillo一起使用,有两种选择:

1.
解压缩armadillo .tar.gz包,然后编辑CMakeLists.txt文件.取消注释231到238行,从find_package(HDF5)开始(即删除#个字符).修改CMakeLists.txt后,按照README.txt文件中的说明运行基于cmake的安装.

要么

2.
正常安装Armadillo(无需修改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库并希望Armadillo使用它而不是标准BLAS,请将-lblas更改为-lopenblas

标签:c,hdf5,armadillo
来源: https://codeday.me/bug/20191009/1876075.html