如何在GCC Linux中指定非默认共享库路径?获得;加载共享库时出错“;跑步时
有一台我没有root权限的笔记本电脑 在这台机器上,我使用如何在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是在没有警告的情况下生成的,但当我运行它时,抛出了如下错误: /
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
这样做的好处是不会为其他任何内容更改库路径。应该是
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