2009-06-12 98 views
2

我在Linux中實現了一個共享庫並嘗試對其進行測試,但遇到了「未定義的對CEDD(char *)'的引用」的錯誤。對共享庫函數的未定義引用

我使用Eclipse具有下列參數:

  • 路徑包括文件(這裏是 一切就OK了)
  • 的路徑庫 和它的名字。路徑是正確的,並且 名字是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; 

} 

頁眉Descriptor.h:我使用的測試

測試PROGRAMM:

double* CEDD(char* path); 

Descriptor.c的一部分與理想的功能:

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

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

我在做什麼wrog?我在互聯網上發表了很多文章,但是我沒有找到解決方案。

對CEDD(char *)的未定義引用是編譯器還是鏈接器錯誤?

回答

2

這是一個鏈接器錯誤(雖然我不認爲它通常包含'char *'位),所以它似乎無法找到您的庫或庫不包含該函數。後者也可能意味着它包含實際功能,但名稱不同;確保兩個項目都編譯爲C而不是C++。

編輯:我錯過了你的程序是C++(它也解釋了更詳細的鏈接器消息)。在這種情況下,如果庫位於C中,則應該添加extern "C"(有條件的,因此僅在使用C++時)用於聲明CEDD

1

您確定鏈接了構建時爲descriptor.c生成的目標代碼嗎?

+1

不,我不確定這一點。我需要這樣做嗎?我以爲我只需要一個* .so文件和一個頭文件* .h。 – user101375 2009-06-12 11:52:01

+0

看看裏面,這樣CEDD符號在那裏定義。然後,確保.so文件已鏈接(不幸的是,我不是Eclipse上的專家,提供有關環境配置的詳細信息...) – 2009-06-12 11:54:01