我已经在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;
    
    }
    

    header Descriptor.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 *)”的 undefined reference 是编译器还是链接器错误?

    最佳答案

    这是一个链接器错误(尽管我不认为它通常包含'char *'位),因此似乎无法找到您的库或该库不包含该函数。后者也可能意味着它确实包含实际功能,但名称不同。确保两个项目都编译为C而不是C++。

    编辑:我想念您的程序是C++(它也解释了更详细的链接器消息)。在这种情况下,如果库位于C中,则应在extern "C"的声明中添加CEDD(有条件的,因此仅在使用C++时使用)。

    10-08 11:28