0

まず、問題のすべての部分で 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 にインストールすると問題が解決すると思います。

問題は、エラーを取り除き、ローカル フォルダーを引き続き使用する方法はありますか? もしそうなら、どのように?

4

1 に答える 1

0

これだけだけコンパイルしてみましたか?

// A.hpp
class Sub; //forward declaring the sub-class
class A{
    private:
       Sub s;
       // more private variables
    public:
        // some interface functions
};

これSubは不完全な型でありA、クラスを定義する必要があるためコンパイルされません。これを見て、前方宣言を使用する方法を確認してください。

libSub のヘッダー ファイルを他のライブラリに含めることから始める必要があると思います。小さな例でそれを行い、さらに問題がある場合は戻ってきてください。

于 2013-11-07T16:05:51.903 に答える