如何在GCC Linux中指定非默认共享库路径?获得;加载共享库时出错“;跑步时

如何在GCC Linux中指定非默认共享库路径?获得;加载共享库时出错“;跑步时,gcc,linker,shared-libraries,Gcc,Linker,Shared Libraries,有一台我没有root权限的笔记本电脑 在这台机器上,我使用configure--prefix=$HOME/.usr安装了一个库 之后,我在~/.usr/lib中获得了这些文件: libXX.so.16.0.0 libXX.so.16 libXX.so libXX.la libXX.a 当我编译一个程序,用以下命令调用库提供的函数之一时: gcc XXX.c-o XXX.out-L$HOME/.usr/lib-lXX xxx.out是在没有警告的情况下生成的,但当我运行它时,抛出了如下错误: /

有一台我没有root权限的笔记本电脑

在这台机器上,我使用
configure--prefix=$HOME/.usr
安装了一个库

之后,我在
~/.usr/lib
中获得了这些文件:

libXX.so.16.0.0
libXX.so.16
libXX.so
libXX.la
libXX.a
当我编译一个程序,用以下命令调用库提供的函数之一时:
gcc XXX.c-o XXX.out-L$HOME/.usr/lib-lXX

xxx.out是在没有警告的情况下生成的,但当我运行它时,抛出了如下错误:

/xxx.out:加载共享库时出错:libXX.so.16:无法打开共享对象文件:没有此类文件或目录
,但
libXX.so.16
驻留在其中

我没有线索的假设是调用xxx.out时没有搜索
~/.usr/lib
。 但是我可以做些什么来指定.so的路径,以便xxx.out可以在那里查找.so文件

另外,当我将
-static
馈送到gcc时,另一个错误如下:

undefined reference to `function_proviced_by_the_very_librar'
似乎
。因此
并不重要,即使
-L
-L
被赋予了gcc。 我应该如何使用该库构建可用的exe


对于其他和我有同样问题的人 我发现了这个


它介绍了静态/共享/动态加载库,以及使用它们的一些示例代码。

有两种方法可以实现这一点:

  • 使用
    -rpath
    链接器选项:
gcc XXX.c-o XXX.out-L$HOME/.usr/lib-lXX-Wl,-rpath=/HOME/user/.usr/lib

  • 使用
    LD\u LIBRARY\u PATH
    环境变量-将此行放入
    ~/.bashrc
    文件:

    export LD\u LIBRARY\u PATH=/home/user/.usr/lib

这甚至适用于预生成的二进制文件,因此您可以从下载一些软件包,将二进制文件和共享库解压缩到主目录中,然后在不重新编译的情况下启动它们

对于快速测试,您还可以(至少在bash中)执行以下操作:


这样做的好处是不会为其他任何内容更改库路径。

应该是
library\u路径
而不是
LD\u library\u路径

gcc检查
LIBRARY\u PATH
,可以通过
-v
选项查看
LD\u LIBRARY\u PATH
不适用于gcc,它适用于运行时库加载器(/lib/LD linux.so.2等)。可能根本没有安装GCC,以便
LD\u LIBRARY\u PATH
正常工作。
LD_LIBRARY_PATH=/home/user/.usr/lib ./xxx.out