2

Linuxに共有ライブラリを実装してテストしようとしましたが、「 `CEDD(char *)'への未定義の参照」というエラーが表示されます。

私は次のパラメーターでEclipseを使用しています。

  • ファイルを含めるためのパス(これですべて問題ありません)
  • ライブラリへのパスとその名前。パスは正しく、名前はWISE_C(フルネーム:libWISE_C.so)です。

私のコード:

私がテストに使用するテストプログラム:

#include <iostream>
#include <Descriptor.h>

int main() {
    char* path = "/export/home/pdmazubi3/workspace/proj1/src/pic.jpg";
    double * cedd = CEDD(path); /////   <-ERROR!

    std::cout << "!!!Hello World!!!" << cedd[1];
    return 0;

}

ヘッダー記述子.h:

double* CEDD(char* path);

望ましい機能を持つDescriptor.cの一部:

#include "Descriptor.h"
#include "highgui.h"
#include "cv.h"

double* CEDD(char* path)
{
    IplImage* srcImg;
    IplImage* ImageGrid;
...
}

私は何をしているの?私はインターネットでたくさんの記事を集めましたが、解決策が見つかりませんでした。

`CEDD(char *)'への未定義の参照は、コンパイラまたはリンカのエラーですか?

4

2 に答える 2

2

これはリンカ エラーです (通常は 'char*' ビットが含まれているとは思いませんが)、ライブラリが見つからないか、ライブラリに関数が含まれていないようです。後者は、実際の関数が含まれていることを意味する場合もありますが、名前が異なります。両方のプロジェクトが C++ ではなく C としてコンパイルされていることを確認してください。

編集:あなたのプログラムがC ++であることを見逃しました(より詳細なリンカメッセージについても説明しています)。この場合、ライブラリが Cextern "C"の場合の宣言に (条件付きで、C++ を使用する場合にのみ使用される) を追加する必要があります。CEDD

于 2009-06-12T11:52:51.067 に答える
1

ビルド時に、descriptor.c 用に生成されたオブジェクト コードをリンクしましたか?

于 2009-06-12T11:48:53.917 に答える