未定义的共享库函数的引用

时间:2009-06-12 11:39:11

标签: c++ linux linker shared-libraries

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

我在做什么wrog?我在互联网上搜集了很多文章,但我没有找到解决方案。

对`CEDD(char *)'的未定义引用是编译器或链接器错误?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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