Path 在名称上具有路径的共享库

Path 在名称上具有路径的共享库,path,shared,ld,rpath,Path,Shared,Ld,Rpath,我正在做一个项目,它使用了很多它自己的共享库;我的意图是在目录中创建一个库名,因此,例如,我将使用-lfoo/bar(查找/usr/lib/libfoo.so或/opt/lib/libfoo.so或诸如此类)而不是-lfoo(查找/usr/lib/libfoo/bar.so或/opt/libfoo/bar.so或诸如此类) 我编写了一个真正的小代码进行测试: const char *mylib(void) { return "it woooorks! =D"; }; 并用:gcc-fPIC

我正在做一个项目,它使用了很多它自己的共享库;我的意图是在目录中创建一个库名,因此,例如,我将使用-lfoo/bar(查找/usr/lib/libfoo.so或/opt/lib/libfoo.so或诸如此类)而不是-lfoo(查找/usr/lib/libfoo/bar.so或/opt/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


提前感谢。:)

如果库不在标准路径中(并且/opt是通常不被搜索的路径),则必须使用-L/-rpath指定路径,如在
gcc blah.c-L/opt/whatever-Wl、-rpath、/opt/whatever-lbar
中所述。不要试图在
-l
参数中使用路径分隔符。

这个想法是要有一个相对于标准搜索路径的路径,以便它可以查找/usr/lib/whater/test.so、/usr/local/lib/whater/test.so、/opt/lib/whater/test.so等等。