【问题标题】:Installing Armadillo without root permission在没有 root 权限的情况下安装犰狳
【发布时间】:2019-02-25 01:30:14
【问题描述】:

我一直在尝试在我既没有 root 也没有 sudo 权限的集群环境中安装 C++ armadillo 库。到目前为止,我还没有取得太大的成功。 遵循一些系统管理员基本指南、犰狳自述文件和here 提供的说明,我已经了解了安装部分:

"cmake . -DCMAKE_INSTALL_PREFIX:PATH=<desired directory>

在“所需目录”中,我已经介绍了我的代码所在的文件夹。

然后我做了

make

make install

然后回到我安装犰狳的目录。我尝试编译我的代码并收到消息: “错误:犰狳:没有这样的文件或目录” 我的假设是系统根本看不到图书馆。然后系统管理员建议我更改 $LD_LIBRARY_PATH 以便编译器知道在哪里查找。我继续这样做:

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:<desired directory>

只是再次得到同样的错误。 (“所需目录”是我的代码和库所在的目录)。

我怀疑我可能犯了一些非常基本的错误,但这是我第一次尝试解决此类问题。因此,我将不胜感激,并感谢您的耐心等待。

【问题讨论】:

  • 消息“错误:犰狳:没有这样的文件或目录”看起来不像链接器找不到库。它看起来更像是 armadillo executable 找不到,因为它不包含扩展名。由于后一种情况很奇怪(armadillo 包没有附带可执行文件),您似乎向项目传递了错误的参数。在任何地方,给定的错误消息都太短,无法得出为什么没有构建 您的代码 的结论。 [提示:显示您的代码]。
  • 您好@Tsyvarev,感谢您的回答。我实际上在库中提供的一些示例代码中进行了测试。特别是,我将“example1.cpp”带到了包含我的代码(以及我认为的库)的文件夹中,尝试编译并得到与我自己的代码相同的错误:example1.cpp:2:21: error : armadillo: 没有这样的文件或目录
  • 如果您打开错误消息 (example1.cpp) 引用的文件,那么您将在其第二行找到 #include &lt;armadillo&gt;。错过的是 header,而不是 library。如果您使用随附的 Makefile 构建示例,打开此文件,您会发现这些 cmets:## If you've installed Armadillo's headers manually, you may need to tell the compiler where they are.## For example, change ../include to /usr/local/include
  • 我试图回到这个并有一些问题。我的猜测是 #include 是对标头的调用(可能是标头本身是调用库的文件吗?)。不知何故,编译器不知道犰狳的标头在哪里,这就是我收到该错误的原因。由于我不知道如何使用“makefile”,所以在调用 g++ 时尝试使用“-I”选项,即:g++ example.cpp -o example -I Directory/include。这有意义吗?
  • 是的,你可以使用-I 选项来提示编译器包含目录。

标签: cmake permissions installation armadillo


【解决方案1】:

基于犰狳网站上的Questions 页面,一种方法是简单地将-I 选项用于gcc 或clang。如果您在/home/sergio 中解压了犰狳,以下应该可以解决问题:

g++ prog.cpp -o prog -O2 -I /home/sergio/armadillo-9.100.5/include -DARMA_DONT_USE_WRAPPER -lopenblas -llapack

如果您使用的机器没有安装OpenBLAS,请将-lopenblas 更改为-lblas。 (OpenBLAS 是 BLAS 的快速版本)。

【讨论】:

  • 效果很好,非常感谢!这是因为 openblas 和 lapack 与犰狳生活在不同的目录中吗?
猜你喜欢
  • 2015-08-22
  • 1970-01-01
  • 1970-01-01
  • 2015-11-12
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
相关资源
最近更新 更多