可以将--export-dynamic传递给ld,这将在程序中导出符号(以便在运行时加载的任何共享库都可以使用这些符号):
$ cat > test.c
void foo() {}
int main() { foo(); }
^D
$ gcc test.c
$ nm -D a.out | grep foo...nothing。现在:
$ 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中有记录。
可以只从一个特定的静态库导出符号吗?
给予如下:
$ 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,但我不了解文件的格式,也不了解如何从静态库中提取符号列表?)
发布于 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。该文件应包括:
{
foo;
};ld --只为一个库导出动态?
未经测试:
gcc myprogram.cc lib1.a lib2.a \
-Wl,--dynamic-list=<(echo '{'; nm lib1.a | awk '{print $3";"}'; echo '};')https://stackoverflow.com/questions/70553581
复制相似问题