我有多个目标文件(让我们说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中看到所有符号都存在。我在这里做错了什么?

最佳答案

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

10-07 15:56