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