我正在测试一个非传统的项目布局,rake
作为make实用程序。有一个规则从不同目录中的源文件编译二进制文件,并将它们与共享库链接。此规则从项目的根目录运行。例如,规则是这样做的:
clang -I libs/ -o tests/sourcefile2 tests/sourcefile2.c shared_libs/libFoo.so
结果我得到了二进制文件中的完整路径shared_libs/libFoo.so
:
readelf -d tests/sourcefile2
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [shared_libs/libFoo.so]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
...
我想把它改成'libFoo.so',就像这样:
readelf -d tests/sourcefile2
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libFoo.so]
...
然后我可以根据需要为动态链接器设置RPATH
,这样可以提供一些灵活性。但我找不到相应的选项或类似的例子。你能建议怎么办吗?我应该只使用临时目录进行构建,复制所有内容并在那里编译吗?
答案 0 :(得分:2)
不确定它是否对您有所帮助。但是当我尝试编写一些狗屎时,我不知道是什么标志。我使用pkg-config
。
例如,编译使用Xlib的程序
pkg-config -cflags -libs x11
,输出如下
-I/usr/X11R7/include -D_REENTRANT -Wl,-rpath,/usr/X11R7/lib -L/usr/X11R7/lib -lX11
请注意,这在系统上有所不同,例如NetBSD强制我将其与rpath
链接,并且此输出中有可选参数。
所以我复制pkg-config
的输出并编译。
答案 1 :(得分:1)
如果您使用'ld'作为链接器,则应该可以使用“-Wl,-soname”。