我正在制作一个使用很多自己的共享库的项目;我的意图是在目录中创建一个库名称,因此,例如,代替 -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?
提前致谢。:)