gpt4 book ai didi

c++ - 为什么在我使用 -fvisibility=hidden 时仍会导出构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:58:14 28 4
gpt4 key购买 nike

我有一个 A 类:

class A
{
public:
A() {}
virtual ~A() {}

void Func();
};

和另一个使用 A 的 M 类。我想创建 libM.so 来隐藏所有 A 的符号。我使用以下脚本来编译它:

g++ -c A.cc -fPIC -fvisibility=hidden
g++ -c M.cc -fPIC
g++ -shared -z defs -o libM.so M.o A.o

但是当我使用“nm -DC libM.so”时,它仍然有

0000000000000c78 W A::A()
0000000000000c78 W A::A()

我在 google 上搜索了这个问题,发现了另一个 gcc 选项:“-fvisibility-inlines-hidden”来隐藏内联函数,但即使在编译 A.o 时添加这个选项,我仍然得到相同的结果

g++ -c A.cc -fPIC -fvisibility=hidden -fvisibility-inlines-hidden

为什么“-fvisibility-inlines-hidden”没有效果?如何防止 A::A() 出现在 libM.so 的导出符号中?非常感谢!

最佳答案

感谢 Mike Seymour。我应该在编译M.cc的时候加上-fvisibility-inlines-hidden

g++ -c A.cc -fPIC -fvisibility=hidden -fvisibility-inlines-hidden
g++ -c M.cc -fPIC -fvisibility-inlines-hidden
g++ -shared -z defs -o libM.so M.o A.o

关于c++ - 为什么在我使用 -fvisibility=hidden 时仍会导出构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14596672/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com