LD--导出--仅针对一个库的动态? [英] ld --export-dynamic for just one library?
本文介绍了LD--导出--仅针对一个库的动态?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
可以将--export-dynamic
传递给ld
,这将导出程序中的符号(以便它们可用于运行时加载的任何共享库):
$ cat > test.c
void foo() {}
int main() { foo(); }
^D
$ gcc test.c
$ nm -D a.out | grep foo
...没什么。现在:
$ gcc -Wl,--export-dynamic test.c
$ nm -D a.out | grep foo
0000000000001129 T foo
...有效。
https://sourceware.org/binutils/docs-2.34/ld/Options.html#Options
中记录了这一点是否可以仅从一个特定的静态库中导出符号?
类似于:
$ gcc myprogram.cc lib1.a lib2.a lib3.a
假设我只想从lib2.a中导出程序中的符号,而不是lib1.a或lib3.a?
我已尝试:
$ gcc myprogram.cc lib1.a -Wl,--export-dynamic lib2.a -Wl,--no-export-dynamic lib3.a
但它不起作用,看起来--export-dynamic
是全局的。
(文档提到--dynamic-list=listfile
,但我不理解文件的格式,或者如何从静态库中提取符号列表?)
推荐答案
如何从静态库提取符号列表?
nm staticlib.a | awk 'some parsing here, mostly {print $3}'
无法理解文件的格式
我也没有,但我找到了这个链接:https://sourceware.org/legacy-ml/binutils/2010-01/msg00416.html。该文件应包含:
{
foo;
};
ld--导出-仅一个库的动态?
未测试:
gcc myprogram.cc lib1.a lib2.a
-Wl,--dynamic-list=<(echo '{'; nm lib1.a | awk '{print $3";"}'; echo '};')
这篇关于LD--导出--仅针对一个库的动态?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文