首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有一个库的输出动态?

只有一个库的输出动态?
EN

Stack Overflow用户
提问于 2022-01-02 04:17:26
回答 1查看 397关注 0票数 1

可以将--export-dynamic传递给ld,这将在程序中导出符号(以便在运行时加载的任何共享库都可以使用这些符号):

代码语言:javascript
复制
$ cat > test.c

void foo() {}

int main() { foo(); }

^D
$ gcc test.c
$ nm -D a.out | grep foo

...nothing。现在:

代码语言:javascript
复制
$ gcc -Wl,--export-dynamic test.c
$ nm -D a.out | grep foo
0000000000001129 T foo

...works。

这在https://sourceware.org/binutils/docs-2.34/ld/Options.html#Options中有记录。

可以只从一个特定的静态库导出符号吗?

给予如下:

代码语言:javascript
复制
$ gcc myprogram.cc lib1.a lib2.a lib3.a

假设我只是想从lib2.a导出程序中的符号,而不是lib1.a或lib3.a?

我试过:

代码语言:javascript
复制
$ gcc myprogram.cc lib1.a -Wl,--export-dynamic lib2.a -Wl,--no-export-dynamic lib3.a

但是它不起作用,看起来--export-dynamic是全球性的。

(文档提到了--dynamic-list=listfile,但我不了解文件的格式,也不了解如何从静态库中提取符号列表?)

EN

回答 1

Stack Overflow用户

发布于 2022-01-02 11:44:01

如何从静态库中提取符号列表?

nm staticlib.a | awk 'some parsing here, mostly {print $3}'

不理解文件的格式

我也没有,但我找到了这个链接:https://sourceware.org/legacy-ml/binutils/2010-01/msg00416.html。该文件应包括:

代码语言:javascript
复制
{
   foo;
};

ld --只为一个库导出动态?

未经测试:

代码语言:javascript
复制
gcc myprogram.cc lib1.a lib2.a \
    -Wl,--dynamic-list=<(echo '{'; nm lib1.a | awk '{print $3";"}'; echo '};')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70553581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档