clang,linux,是否可以选择在链接时更改共享库名称?
clang, linux, is there an option to change shared library name at linking?
我正在测试一个有点非常规的项目布局和 rake
作为 make 实用程序。有一条规则是从不同目录中的源文件编译二进制文件,并使用共享库 link 它们。这个规则是来自项目根目录的运行。例如规则是这样的:
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]
...
然后我可以根据需要为动态 linker 设置 RPATH
,这会提供一些灵活性。但是我找不到相应的选项或类似的例子。你能建议如何处理这个吗?我应该只使用临时目录进行构建,复制所有内容并在那里编译吗?
不确定是否对您有帮助。但是当我尝试编译一些狗屎时,我不知道什么标志。我用 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
link 它,并且此输出中有可选参数。
所以我复制 pkg-config
的输出并编译。
if 如果您使用 'ld' 作为链接器,您应该可以使用“-Wl,-soname”。
我正在测试一个有点非常规的项目布局和 rake
作为 make 实用程序。有一条规则是从不同目录中的源文件编译二进制文件,并使用共享库 link 它们。这个规则是来自项目根目录的运行。例如规则是这样的:
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]
...
然后我可以根据需要为动态 linker 设置 RPATH
,这会提供一些灵活性。但是我找不到相应的选项或类似的例子。你能建议如何处理这个吗?我应该只使用临时目录进行构建,复制所有内容并在那里编译吗?
不确定是否对您有帮助。但是当我尝试编译一些狗屎时,我不知道什么标志。我用 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
link 它,并且此输出中有可选参数。
所以我复制 pkg-config
的输出并编译。
if 如果您使用 'ld' 作为链接器,您应该可以使用“-Wl,-soname”。