LD--导出--仅针对一个库的动态? [英] ld --export-dynamic for just one library?

查看:0
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆