5

私は共有ライブラリwise.soを持っています。プログラムでどのように使用できますか?そのライブラリのヘッダーを含める必要がありますか?

私はLinuxでEclipceを使用しています。-Lと-lを使用してライブラリへのパスを設定しました。しかし、私の関数はプログラムに表示されません。

共有ライブラリの仕組みを教えてください。

よろしく。

編集:

次のエラーが発生します。

int main() {
    char* path = "/export/home/pdmazubi3/workspace/proj1/src/pic.jpg";
    CEDD_Descriptor::CEDD ced; // undefined reference to `CEDD_Descriptor::CEDD::CEDD[in-charge]()'
    ced.execute(path);
}

ヘッダ:

class CEDD
    {
        public:
            CEDD(double Th0, double Th1, double Th2, double Th3,bool CompactDescriptor);
            CEDD();
            ~CEDD(void);

            double T0;
            double T1;
            double T2;
            double T3;
            bool Compact;

            double* execute(char* path);

        private:
            int cedd_segnum;                //number of segments
            int* cedd_partitionSize;        //number of pixels in each segment
    };
4

2 に答える 2

10

アプリケーションにヘッダーファイルをインクルードし、それに対してリンクする必要があります。

共有ライブラリでライブラリを使用する方法とLinuxのハウツーをご覧ください。

ヘッダーファイルがアプリケーションと同じディレクトリにない場合(通常はそうではありません)、コンパイラにどこを探すかを指示する必要があり-I/path/to/includeます。ヘッダーファイルを含むディレクトリをインクルードするためのパスをインクルードするために使用します。

リンク手順では、ライブラリをポイントする必要があります。一般的な使用法は-L/path/to/lib、ライブラリを含むディレクトリへのパスと、それに続くライブラリ-l<libname><libname>名前ですliblibboost_serialization-d-1_34_1.so-lboost_serialization-d-1_34_1

例:

g++ -I/sw/include -Wall -g -I/usr/local/include/boost-1_36/ -c main.cpp -o main.o
g++ -L/sw/lib -lboost_serialization-d-1_34_1 -o x main.o 
于 2009-06-08T10:34:33.150 に答える
0

ライブラリのヘッダーを探す場所がわかるように、インクルードパス(-Iオプション)も変更しましたか?これを行っていない場合、コンパイラは関数/クラス/構造などを見つけることができないと文句を言います。

于 2009-06-08T10:38:48.303 に答える