OpenCV C++/C 编译错误:未定义对 'cv::fastFree(void*)' 的引用
OpenCV C++/C compilation error: undefined reference to `cv::fastFree(void*)'
我试图有一个C程序调用使用OpenCV的c++文件中的函数。我可以让C文件调用c++文件中的基本整数函数并返回结果,但是每当我尝试向c++文件添加一些OpenCV代码时,我都会得到编译错误。以下是我在每个模块中的简单代码:
foo.cpp
#include <time.h>
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/core/mat.hpp"
#include "opencv/cv.hpp"
#include <iostream>
#ifdef _cplusplus
extern "C" int f(int);
#endif
using namespace std;
using namespace cv;
int f(int i)
{
cout << "CPP SON: " << i << endl;
i--;
//Mat image;
//image = imread( "image1.jpg", 1 );
//namedWindow( "image1.jpg", CV_WINDOW_AUTOSIZE );
//imshow( "image1.jpg", image );
//waitKey(0);
return i;
}
bar.c
#include <stdio.h>
int global = 0;
int f(int);
void cc(int i)
{
global = f(i);
/* ... */
printf("hello from C! %d n", global);
}
int main(int argc, char *argv[]) {
printf("this si is the C code called mainn");
cc(32);
}
Makefile
mot : foo.o bar.o
g++ `pkg-config --cflags opencv` -o mot `pkg-config --libs opencv` foo.o bar.o
foo.o : foo.cpp
g++ `pkg-config --cflags opencv` -c foo.cpp `pkg-config --libs opencv` -o foo.o
bar.o : bar.c
g++ `pkg-config --cflags opencv` -c bar.c `pkg-config --libs opencv` -o bar.o
clean :
rm foo.o
rm bar.o
rm mot
当注释掉foo.cpp文件中的所有OpenCV行时,返回以下输出:
bi@rtes4:~/Desktop$ make
g++ `pkg-config --cflags opencv` -c foo.cpp `pkg-config --libs opencv` -o foo.o
g++ `pkg-config --cflags opencv` -c bar.c `pkg-config --libs opencv` -o bar.o
g++ `pkg-config --cflags opencv` -o mot `pkg-config --libs opencv` foo.o bar.o
bi@rtes4:~/Desktop$ ./mot
this si is the C code called main
CPP SON: 32
hello from C! 31
注释掉"Mat image;"行后会产生以下错误:
bi@rtes4:~/Desktop$ make
g++ `pkg-config --cflags opencv` -c foo.cpp `pkg-config --libs opencv` -o foo.o
g++ `pkg-config --cflags opencv` -c bar.c `pkg-config --libs opencv` -o bar.o
g++ `pkg-config --cflags opencv` -o mot `pkg-config --libs opencv` foo.o bar.o
foo.o: In function `cv::Mat::~Mat()':
foo.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x39): undefined reference to `cv::fastFree(void*)'
foo.o: In function `cv::Mat::release()':
foo.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x47): undefined reference to `cv::Mat::deallocate()'
collect2: error: ld returned 1 exit status
make: *** [mot] Error 1
有谁可以帮忙吗?事先感谢您对此事的协助,不胜感激。
这不是编译错误,而是链接错误。
我怀疑你不熟悉c++的构建阶段。你的makefile有编译规则(foo.o)和链接规则(mot)。现在两者都含有pkg-config --libs opencv
。但是,您应该只在链接时传递库;编译步骤只需要OpenCV头文件。
pkg-config --libs opencv
的输出是多少?这是一个shell命令,用于获取本地OpenCV安装。可能是配置错了,或者根本没有。
问题出在链接阶段。我必须将共享库传递给gcc编译器,以便C程序能够引用未被篡改的c++代码。
相关文章:
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 在c++类上调用void函数
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 在派生函数中指定void*参数
- C++为什么尽管我调用了void函数,它却不起作用
- 如何从void函数输出字符串
- 我应该使用什么来代替void作为变体中的替代类型之一
- 奇怪的结构&GCC&clang(void*返回类型)
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 为什么这个函数将"const char*"转换为"void* const"而不是"const void*"
- 引用一个已擦除类型(void*)的指针
- 将尾部调用void(i32,..)位转换为llvm::函数以获取FnAttribute
- 库函数需要一个 std::function<void(void)>,如何传入类函数?
- 如何将指针从一个void函数传递到另一个C++
- 为什么我在使用void函数时得到错误代码C2276
- void*到驱动程序中的UnicodeString
- SWIG链接器:未定义符号:_ZN2cv8fastFreeEPv(cv::fastFree(void*))
- 键入对"cv::fastFree(void*)"的未定义引用
- 对 'cv::fastFree(void*)' 的未定义引用
- OpenCV C++/C 编译错误:未定义对 'cv::fastFree(void*)' 的引用