Я имею:
Bar
с методом int Bar::do(int d) const
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 составлен с флагом -fvisibility = скрытый.
Проблема заключается в следующем: я выполняю команду Linux nm -g -D -C —defined-only libShared.so, и это приводит к тому, что учебный класс Foo, наряду с его методом, виден снаружи libShared.so, несмотря на то, что сказал компилятору скрыть все, кроме того, что помечено как «публичный» (на самом деле, они помечены как «T» нм).
Как я могу избежать этого? я хочу libShared.so не выставлять символы, идущие от его зависимостей.
Спасибо
Вам нужно скомпилировать libStatic.a также с флагом -fvisibility=hidden
,