【发布时间】:2012-02-08 17:50:59
【问题描述】:
有一台笔记本电脑我没有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: error while loading shared libraries: libXX.so.16: cannot open shared object file: No such file or directory ,虽然 libXX.so.16 驻留在那里。
我毫无头绪的假设是 ~/.usr/lib 在调用 xxx.out 时没有被搜索。
但是我该怎么做才能指定 .so 的路径,以便 xxx.out 可以在那里查找 .so 文件?
另外,当我将-static 提供给 gcc 时,会发生另一个错误,如下所示:
undefined reference to `function_proviced_by_the_very_librar'
似乎.so 无关紧要,即使-L 和-l 被赋予gcc。
我应该怎么做才能用那个库构建一个可用的 exe?
对于和我有同样问题的其他人
我找到了a useful article at tldp 关于这个。
它介绍了静态/共享/动态加载库,以及一些使用它们的示例代码。
【问题讨论】:
标签: gcc linker shared-libraries