【发布时间】:2014-12-07 23:25:36
【问题描述】:
我有多个对象文件(比如说obj1.o、obj2.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