【问题标题】:Hiding symbol visibility while building a shared lib在构建共享库时隐藏符号可见性
【发布时间】:2014-12-07 23:25:36
【问题描述】:

我有多个对象文件(比如说obj1.oobj2.o),我正在使用它们构建一个共享库(libapp.so)。所有关联的对象在构建时都没有隐藏可见性标志,但最终如此(libapp.so,见下文),如果我使用可见性标志作为hidden,它是否会隐藏外部库中的所有内部函数以供使用?

gcc -shared -fPIC -fvisibility=hidden obj1.o obj2.o -o libapp.so

编辑:

正如 wRAR 提到的,我尝试使用版本脚本来隐藏最终共享库上的所有符号。版本脚本是这样写的-

文件:libapp.version

{
    local: *;
};

我将共享库构建为:

gcc -shared -fPIC obj1.o obj2.o -o libapp.so -Wl,--version-script=libapp.version

即使将所有符号都设置为本地符号,我仍然可以在 nm 中看到所有符号都存在。我在这里做错了什么?

【问题讨论】:

    标签: c gcc visibility ld symbols


    【解决方案1】:

    -fvisibility 是一个编译时选项,所以它在链接时不起作用。您可以为ld 编写版本脚本以在链接时隐藏符号。

    【讨论】:

    • 我试过你提到的版本脚本。请参阅我对问题的编辑部分的尝试。如果我以错误的方式使用脚本,请告诉我。
    猜你喜欢
    • 2021-07-27
    • 2022-01-22
    • 2013-05-22
    • 2022-01-08
    • 2021-11-04
    • 2019-08-02
    • 2012-11-27
    • 2012-09-22
    • 2019-09-26
    相关资源
    最近更新 更多