避免在Linux上从可执行文件导出符号

时间:2010-03-03 21:41:56

标签: linux gcc export symbols ld

我发现当我将可执行文件链接到静态库(.a)时,静态库中的符号最终会被可执行文件导出。我想避免这种情况并且不输出任何东西。

我尝试过提供版本脚本,但似乎没有任何区别。我的版本脚本的内容如下:

{
    global:
        main;
    local:
        *;
};

在静态库中链接时,是否有办法不从可执行文件中导出符号?我无法重新编译静态库本身。

2 个答案:

答案 0 :(得分:8)

默认情况下,可执行文件不导出符号,除非使用-Wl, - export-dynamic,否则不执行此操作。只有当您动态加载自身需要链接到主可执行文件中的符号的库时,这是必要的(如果您的库包含覆盖exe中虚拟方法的类,则这是C ++中的常见情况)

也许你会混淆导出带有调试符号的符号。为了调试器的利益,将生成调试符号(如果不剥离exe),但不需要运行。

答案 1 :(得分:3)

使用strip

$ man strip