私は持っている:
- 共有ライブラリ、たとえばlibShared.so
Bar
、メソッドを含む class を含む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を実行すると、クラスFooとそのメソッドがlibShared.soの外に表示されます。 「パブリック」としてマークされているものを除くすべてを非表示にするコンパイラ(実際には、それらはnmによって「T」としてマークされています)。
どうすればこれを回避できますか? libShared.soがその依存関係から来るシンボルを公開しないようにします。
ありがとう