我已经在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++时使用)。