4

我正在尝试在我没有 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
4

3 回答 3

3

您可以使用

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

等等在你的.bashrc文件中。这样,每当您在命令行上调用 gcc 时,都会在您在命令行上输入的每个其他参数之前添加标志

于 2013-10-11T21:52:55.840 回答
2

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

于 2013-10-11T21:50:50.030 回答
1

这个问题看起来类似于

如何在 GCC Linux 中指定非默认共享库路径?运行时出现“加载共享库时出错”

如果您不想更改 .bashrc

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

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

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

更多关于 -rpath 这里

我不明白 -Wl,-rpath -Wl,

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

于 2013-10-11T21:55:27.290 回答