我有多个目标文件(让我们说obj1.o
,obj2.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
编写版本脚本,以在链接时隐藏符号。