【发布时间】:2014-10-10 09:06:11
【问题描述】:
我对 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 在犰狳中激活了hdf5。我使用最新版本的犰狳 (4.450) 和 gcc 4.8.3。
我错过了链接吗?对我来说,添加 -larmadillo 和 -lhdf5 (如犰狳的用户指南中所述)就足够了。有什么线索吗? 谢谢
【问题讨论】:
-
我投票决定关闭它作为重复,链接的问题应该告诉你做什么和为什么(改变
-laramdillo和-lhdf5的顺序)。无论哪种方式,我都将其称为犰狳中的一个问题,因为它依赖于 libhdf5,但不会链接到它。 -
我明白你的意思,你链接到的帖子确实很有趣,但我怀疑是订单问题,并在发布前检查了这一点。问题实际上是不同的(见下面的答案)。