我有多个对象文件(比方说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中看到所有符号都存在。我在这里做错了什么?
答案 0 :(得分:1)
-fvisibility
是一个编译时选项,因此它在链接时没有任何影响。您可以为ld
编写一个版本脚本,以便在链接时隐藏符号。