まず、問題のすべての部分で g++4.7 を使用して Linux で c++11 を使用します。
私の問題のセットアップ: さまざまなプログラムで使用する共有ライブラリ (「libA」と呼びましょう) を作成しました。このライブラリ内には、プログラムに関連しないため、インターフェイスで公開されていない部分があります。しかし、今は別のライブラリ (「libB」) で以前は隠されていたこの部分を直接使用したいと考えています。
したがって、私の計画は、libA の隠し部分から新しいライブラリを作成することでした。これは「libSub」になります。libsub は libA と libB の両方に含まれます。どちらもエラーなしでコンパイルされます。しかし、libA に依存するプログラムをコンパイルしようとすると、libSub からの関数への未定義の参照があるという多くのエラーが発生します。
構造をもう少し明確にするために:
// Sub.hpp
class Sub{
private:
// private variables
public:
// interface functions
};
// A.hpp
class Sub; //forward declaring the sub-class
class A{
private:
std::shared_ptr<Sub> s;
// more private variables
public:
// some interface functions
};
// A.cpp
#include <Sub.hpp> // include the declaration of the Sub class
// definitions of the member functions of A
// program.cpp
#include A.hpp
a=A();
ライブラリは、一般的な lib フォルダーにインストールすることを避けたかったため、ローカル フォルダーに配置されます。それらをすべてグローバル lib-folder にインストールすると問題が解決すると思います。
問題は、エラーを取り除き、ローカル フォルダーを引き続き使用する方法はありますか? もしそうなら、どのように?