Gcc скрывает видимость символов, идущих из включенной статической библиотеки

Я имею:

  1. скажем, общая библиотека libShared.so, который содержит класс Barс методом int Bar::do(int d) const
  2. статическая библиотека, скажем 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 = скрытый.

Проблема заключается в следующем: я выполняю команду Linux nm -g -D -C —defined-only libShared.so, и это приводит к тому, что учебный класс Foo, наряду с его методом, виден снаружи libShared.so, несмотря на то, что сказал компилятору скрыть все, кроме того, что помечено как «публичный» (на самом деле, они помечены как «T» нм).

Как я могу избежать этого? я хочу libShared.so не выставлять символы, идущие от его зависимостей.

Спасибо

3

Решение

Вам нужно скомпилировать libStatic.a также с флагом -fvisibility=hidden,

6

Другие решения


По вопросам рекламы [email protected]