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++ (这也解释了更详细的链接器消息)。在这种情况下,您应该将extern "C"(有条件地,因此仅在使用 C++ 时使用)添加到CEDD库是否为 C的声明中。

于 2009-06-12T11:52:51.067 回答
1

您确定在构建时链接了为 descriptor.c 生成的目标代码吗?

于 2009-06-12T11:48:53.917 回答