I have:
- 一个共享库,比如说libShared.so,其中包含一个类
Bar
,用一种方法int Bar::do(int d) const
- 一个静态库,比如说libStatic.a,其中包含一个类
Foo
,用一种方法int Foo::act(int a) const
.
的代码为Bar
是这样的:
//Bar.h
class __attribute__ ((visibility ("default"))) Bar
{
private:
__attribute__ ((visibility ("hidden"))) int privateMethod(int x) const;
public:
Bar() {}
int do(int d) const;
}
//Bar.cpp
#include "Bar.h"
#include "Foo.h"
int Bar::do(int d) const {
Foo foo;
int result = foo.act(d) + this->privateMethod(d);
return result;
}
libShared.so是用标志编译的-f可见性=隐藏.
问题如下:我执行Linux命令nm -g -D -C --仅定义 libShared.so,结果是class Foo及其方法在外部可见libShared.so,尽管告诉编译器隐藏除标记为“公共”之外的所有内容(事实上,它们被标记为“T”nm).
我怎样才能避免这种情况?我想libShared.so不要公开来自其依赖项的符号。
Thanks
你需要编译libStatic.a还带有旗帜-fvisibility=hidden
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)