我正在制作一个使用大量自己的共享库的项目;我的目的是在目录中创建一个库名,例如,而不是-lfoo(要找到/usr/lib/libfoo.so或/opt/lib/libfoo.so或左右),我会使用-lfoo/bar(找到/usr/lib/libfoo/bar.so或/opt/lib/libfoo/bar.so等)。名称上带有路径的共享库
我做了一个真正的小代码进行测试:
const char *mylib(void) {
return "it woooorks! =D";
};
并编译它:gcc -fPIC -shared -Wl,-rpath,libfoo/ lib.c -o /usr/lib/libfoo/bar.so
。
然后,在测试程序中,我使用gcc -lfoo/bar test.c
,并将其编译(它发现从我的库中的mylib()
符号),但是当我尝试运行程序(./a.out
),动态连接器抱怨说,它不能找到图书馆。在我的情况下,使用Mac OS X Lion的:
dyld: Library not loaded: bar.so
Referenced from: /Users/takanuva/tmp/lib/./a.out
Reason: image not found
Trace/BPT trap: 5
我在做什么错?也许答案是“一切”,所以...我应该如何实现所需的效果,在库路径上查找libfoo/bar.so而不是libfoo.so?
在此先感谢。 :)
这个想法是有一个相对于标准搜索路径的路径,所以它可以查找/usr/lib/whatever/test.so,/usr/local/lib/whatever/test.so,/ opt/lib /whatever/test.so等等。 – paulotorrens