GNU链接器:有没有命令行中列出导出符号的--version-script替代方法?

9

在使用GNU工具链的Linux系统中,我知道如何通过版本脚本(gcc -Wl,--version-script=symbols.map)控制共享库中导出的符号,但我希望能够在命令行上列出导出的符号。也就是说,我希望有类似于以下命令的功能:

link /EXPORT:foo 

从MS工具链中是否可以导入?
编辑:
我的问题可能不是非常清楚:如果我有一个库libfoo.so,并且我想仅导出库foo1和foo2,我可以创建一个版本脚本foo.linux,如下所示。
libfoo.so
{
global:
    foo1;
    foo2;
local:
    *;
}

并且执行
gcc -shared foo.c -Wl,--version-script=foo.linux -o libfoo.so -soname libfoo.so

我希望能够像这样做一些事情:
gcc -shared foo.c -Wl,--export-symbol=foo1 -Wl,--export-symbol=foo2 -o libfoo.so -soname libfoo.so
3个回答

4

虽然我晚了八年,但是没关系,您确实可以做您想做的。

使用Bash进程替换

gcc -shared foo.c -Wl,--version-script=<(echo "{global:foo1;foo2;local:*;};") -o libfoo.so -soname libfoo.so

3

我不确定你能像你想的那样做到这一点。一种方法是使用链接器版本脚本,就像你提到的那样。另一种方法是在你的源代码中添加 __attribute__ ((visibility("default"))) ,用于导出你想要的任何内容,并使用 -fvisibility=hidden 编译所有内容。


是的,目前似乎无法做到我想要的。使用属性正是我想要避免的。 - David Cournapeau

-3

readelf和objdump有很多选项。那么:

readelf --symbols --use-dynamic $yourlib.so

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接