3

嗨,正如 README.txt 所说,我在自己的工作目录 /home/me/package/armadillo3.0.1/ 中安装了 Armadillo3.0.1。但是当我尝试一个例子时:

g++ -I /home/me/package/armadillo3.0.1/usr/include/example.cpp -o example -O1

它总是显示错误:

/tmp/ccZAE9pj.o: In function void arma::gemm<false, false, false, false>::apply_blas_type<double>(arma::Mat<double>&, arma::Mat<double> const&, arma::Mat<double> const&, double, double)': example.cpp:(.text._ZN4arma4gemmILb0ELb0ELb0ELb0EE15apply_blas_typeIdEEvRNS_3MatIT_EERKS5_S8_S4_S4_[void arma::gemm<false, false, false, false>::apply_blas_type<double>(arma::Mat<double>&, arma::Mat<double> const&, arma::Mat<double> const&, double, double)]+0x75e): undefined reference towrapper_dgemm_' /tmp/ccZAE9pj.o: In function void arma::glue_times_redirect2_helper<true>::apply<arma::Mat<double>, arma::Mat<double> >(arma::Mat<arma::Mat<double>::elem_type>&, arma::Glue<arma::Mat<double>, arma::Mat<double>, arma::glue_times> const&)': example.cpp:(.text._ZN4arma27glue_times_redirect2_helperILb1EE5applyINS_3MatIdEES4_EEvRNS3_INT_9elem_typeEEERKNS_4GlueIS5_T0_NS_10glue_timesEEE[void arma::glue_times_redirect2_helper<true>::apply<arma::Mat<double>, arma::Mat<double> >(arma::Mat<arma::Mat<double>::elem_type>&, arma::Glue<arma::Mat<double>, arma::Mat<double>, arma::glue_times> const&)]+0xe69): undefined reference towrapper_dgemv_' example.cpp:(.text._ZN4arma27glue_times_redirect2_helperILb1EE5applyINS_3MatIdEES4_EEvRNS3_INT_9elem_typeEEERKNS_4GlueIS5_T0_NS_10glue_timesEEE[void arma::glue_times_redirect2_helper::apply, arma::Mat >(arma:: Mat::elem_type>&, arma::Glue, arma::Mat, arma::glue_times> const&)]+0x1175): undefined reference to `wrapper_dgemv_' collect2: ld 返回 1 exit status

但是,如果我添加 -larmadillo 选项,例如:

g++ example.cpp -o 示例 -O1 -larmadillo

它通过调用旧版本来工作。如果我想使用 Mat.t() 等 3.0.1 中的新功能,它也会显示错误:

example.cpp: In function 'int main(int, char**)': example.cpp:20: error: 'struct arma::mat' has no member named 't'</p>

这表明通过添加 -larmadillo,它从 /usr/include/armadillo_bits/ 调用旧版本的犰狳。

有什么想法吗?谢谢。

4

3 回答 3

2

在第一个命令中,您没有与libarmadillo链接。您是否考虑过使用-L gcc 选项来添加链接目录?例如:

g++ -I/home/me/package/armadillo3.0.1/usr/include/ -L/home/me/package/armadillo3.0.1/usr/lib example.cpp -o example -O1 -larmadillo

于 2012-04-16T04:43:07.203 回答
2

我也遇到过这个问题。我已经通过卸载任何以前版本的犰狳来修复它,因为它们可能会干扰新版本。

卸载可以通过你的包管理器来完成。您还可以通过以下命令(在终端窗口中)手动删除旧版本:

   rm /usr/include/armadillo
   rm -rf /usr/include/armadillo_bits

您需要以超级用户 (root) 身份运行上述命令。在 Ubuntu 上,在它们前面加上“sudo”就足够了。

您可能还需要删除旧的库文件,这些文件可能位于 /usr/lib/ 或 /usr/lib64/ 中,或类似这些行的东西。

删除旧版本后,您可以通过基于 cmake 的安装重新安装新的犰狳。

于 2012-04-19T11:58:24.420 回答
0

我删除了旧的并在默认目录中重新安装了新的。有效!所以似乎当我安装旧版本时:

安装 DESTDIR=my/own/dir/

它安装不正确。

因此对于像我这样的新手来说,默认安装更有意义。

于 2012-04-20T20:24:45.390 回答