【问题标题】:add armadillo libraries to g++ compiler in linux将犰狳库添加到 linux 中的 g++ 编译器
【发布时间】:2013-10-20 02:23:41
【问题描述】:

我正在尝试在我没有 root 权限的 unix 集群中安装 C++ 库 (armadillo)。

通过运行以下 make 命令,我设法在没有用户权限的情况下编译了 C++ 库:

make install DESTDIR=my_usr_dir

但是在犰狳自述文件中它说:

其中“my_usr_dir”用于存储 C++ 头文件和库文件。确保您的 C++ 编译器配置为使用此目录中的子目录。

犰狳用来安装库的编译器是 gcc-4.8.1。我不确定编译器的安装位置,但是当我在 unix 集群中启动会话时它已加载。

安装犰狳后,我正在尝试编译使用犰狳库的开源代码。这个开源代码也有一个makefile。

但是,当我转到开源代码并输入:

make 

它调用 g++。如何确保 g++ 能够识别以前安装在 my_usr_dir 中的犰狳库?

目前,如果我转到 src 然后键入 make,则会收到以下错误:

opencode.cpp:28:21: fatal error: armadillo: No such file or directory
 #include <armadillo>
                     ^
compilation terminated.
make: *** [mmcollapse] Error 1

【问题讨论】:

  • 在询问 SO 之前,您应该有一些基本的了解。你读过 gcc (man gcc) 的手册页吗?特别是关于-I-l-L的部分?
  • @Walter 问题已解决,谢谢。

标签: c++ linux unix gcc armadillo


【解决方案1】:

你可以使用

 alias gcc="gcc -I./my_usr_dir/include -L./my_usr_dir/lib"

在您的.bashrc 文件中以此类推。这样,每当您在命令行中调用 gcc 时,标志将被添加到您在命令行中输入的每个其他参数之前

【讨论】:

  • 问题最终变得稍微复杂一些,如果您有什么建议请告诉我...
  • 我试过了:别名 g++="g++ -I./include -L./lib" 但我仍然得到错误。
  • 你试过#include &lt;armadillo.h&gt;吗?我认为只有标准标题没有扩展名
  • 感谢您的回答让我有了这个想法,我刚刚更改了 makefile,它现在似乎可以工作了......
【解决方案2】:

我认为自述文件是指应用程序中库头和库文件的使用。对于那些有用的,编译器/链接器/加载器(通常都由“编译器”驱动)必须知道在哪里可以找到它们。编译器总是在一些默认目录中查找,例如/usr/include(用于头文件)和/usr/lib/(用于库),但它们需要root权限才能写入。但是,您可以使用标志 -Idirectory 告诉编译器在目录 directory 中搜索标头。对于库,请使用 -l-L(查看编译器的手册页)。如果您使用动态链接(共享目标文件),您可能还需要考虑LD_LIBRARY_PATHLD_RUN_PATH 环境变量。

【讨论】:

  • 请参考新问题,我解释了所有过程......也许我做错了什么,但我一直收到错误。
  • 您似乎没有阅读我的回答。它准确地解释了你必须做什么:使用-I-L 编译器标志。它还说您应该阅读编译器手册页 (man gcc),其中更详细地解释了所有这些。你有吗?
【解决方案3】:

这个问题看起来类似于

How to specify non-default shared-library path in GCC Linux? Getting "error while loading shared libraries" when running

如果你不想更改 .bashrc

按照上面帖子中的建议使用 -rpath。

gcc XXX.c -o xxx.out -Lmy_usr_dir -lXX -Wl,-rpath=my_usr_dir

-L 用于静态链接 -rpath 用于将目录添加到链接器搜索路径

这里有更多关于 -rpath 的内容

I don't understand -Wl,-rpath -Wl,

不要费心为答案投票,因为这真的不是答案。我会发表评论,但我找不到为您的帖子添加评论。

【讨论】:

  • 谢谢,问题与之前的说法略有不同,我编辑了 q
  • -I/location/of/header/file @Roberto 建议的应该可以解决您的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多