代码之家  ›  专栏  ›  技术社区  ›  David Cournapeau

GNU链接器:在命令行列出导出符号的--version脚本的替代方案?

  •  9
  • David Cournapeau  · 技术社区  · 17 年前

    在使用GNU工具链的Linux上,我知道如何使用版本脚本(gcc-Wl,-version script=symbols.map)控制从共享库导出的符号,但我希望在命令行上列出导出的符号。瞧,我想要相当于

    link /EXPORT:foo 
    

    从MS工具链。可能吗?

    编辑:

    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 回复  |  直到 17 年前
        1
  •  3
  •   Unknown    8 年前

    一种方法是使用您提到的链接器版本脚本。另一种方法是添加源代码 __attribute__ ((visibility("default"))) -fvisibility=hidden

        2
  •  3
  •   hidefromkgb    8 年前

    我可能晚了八年,但是是的,你真的可以做你想做的事。

    使用Bash process substitution :

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

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