我正在制作一个使用大量自己的共享库的项目;我的目的是在目录中创建一个库名,例如,代替-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?
提前致谢。 :)
答案 0 :(得分:0)
如果库不在标准路径中(并且/ opt是通常不搜索的路径),则必须使用-L / -rpath指定路径,如gcc blah.c -L/opt/whatever -Wl,-rpath,/opt/whatever -lbar
中所示。请勿尝试在-l
参数中使用路径分隔符。