7

私は持っている:

  1. 共有ライブラリ、たとえばlibShared.soBar 、メソッドを含む class を含むint Bar::do(int d) const
  2. メソッドを持つクラスを含む静的ライブラリ、例えばlibStatic.aFooint 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がその依存関係から来るシンボルを公開しないようにします

ありがとう

4

2 に答える 2