在构建共享库时隐藏符号可见性

时间:2014-10-13 11:47:39

标签: c gcc visibility ld symbols

我有多个对象文件(比方说obj1.oobj2.o),我正在构建一个共享库(libapp.so)。所有关联的对象在构建时都没有隐藏的可见性标记,但最后是这样(libapp.so,见下文),如果我使用可见性标记为hidden,它是否会隐藏所有内部函数要使用的库?

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

编辑:

正如wRAR所提到的,我尝试使用版本cript来隐藏最终共享库中的所有符号。版本脚本写得像 -

文件:libapp.version

{
    local: *;
};

我将我的共享库构建为:

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

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

1 个答案:

答案 0 :(得分:1)

-fvisibility是一个编译时选项,因此它在链接时没有任何影响。您可以为ld编写一个版本脚本,以便在链接时隐藏符号。