Opencv 如何配置链接g++;在ubuntu 18.04中正确使用opecv?

Opencv 如何配置链接g++;在ubuntu 18.04中正确使用opecv?,opencv,ubuntu,g++,libraries,Opencv,Ubuntu,G++,Libraries,我是opencv的新手。我发现应该使用pkg配置--cflags--libs opencv-lopencv_core-lopencv_imgcodecs来平滑编译。但我不知道为什么编译时会出现“undefined reference”错误,输出结果和我的Makefile如下: 1。对于输出: g++ -Wall -g opencv.cpp /tmp/ccg5WiIh.o: In function `main': /home/akatsuki/Documents/Projects/simpleTe

我是opencv的新手。我发现应该使用
pkg配置--cflags--libs opencv-lopencv_core-lopencv_imgcodecs
来平滑编译。但我不知道为什么编译时会出现“undefined reference”错误,输出结果和我的Makefile如下:

1。对于输出:

g++ -Wall -g opencv.cpp
/tmp/ccg5WiIh.o: In function `main':
/home/akatsuki/Documents/Projects/simpleTest/opencv/opencv.cpp:14: undefined reference to `cv::imread(cv::String const&, int)'
/home/akatsuki/Documents/Projects/simpleTest/opencv/opencv.cpp:25: undefined reference to `cv::namedWindow(cv::String const&, int)'
/home/akatsuki/Documents/Projects/simpleTest/opencv/opencv.cpp:26: undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
/home/akatsuki/Documents/Projects/simpleTest/opencv/opencv.cpp:29: undefined reference to `cv::imwrite(cv::String const&, cv::_InputArray const&, std::vector<int, std::allocator<int> > const&)'
/home/akatsuki/Documents/Projects/simpleTest/opencv/opencv.cpp:31: undefined reference to `cv::waitKey(int)'
/tmp/ccg5WiIh.o: In function `cv::String::String(char const*)':
/usr/include/opencv2/core/cvstd.hpp:622: undefined reference to `cv::String::allocate(unsigned long)'
/tmp/ccg5WiIh.o: In function `cv::String::~String()':
/usr/include/opencv2/core/cvstd.hpp:664: undefined reference to `cv::String::deallocate()'
/tmp/ccg5WiIh.o: In function `cv::Mat::~Mat()':
/usr/include/opencv2/core/mat.inl.hpp:592: undefined reference to `cv::fastFree(void*)'
/tmp/ccg5WiIh.o: In function `cv::Mat::release()':
/usr/include/opencv2/core/mat.inl.hpp:704: undefined reference to `cv::Mat::deallocate()'
/tmp/ccg5WiIh.o: In function `cv::Mat::operator=(cv::Mat&&)':
/usr/include/opencv2/core/mat.inl.hpp:1215: undefined reference to `cv::fastFree(void*)'
collect2: error: ld returned 1 exit status
Makefile:16: recipe for target 'opencv.o' failed
make: *** [opencv.o] Error 1
CC = g++
CCFLAG = -Wall -g
Linker = `pkg-config --cflags --libs opencv` -lopencv_core -lopencv_imgcodecs

all: opencv.exe

opencv.exe: opencv.o
    g++ -o $@ opencv.o $(Linker)
    chmod a+x $@

opencv.o: opencv.cpp
    $(CC) $(CCFLAG) opencv.cpp

有人能帮我解决这个问题吗?谢谢~

对于搜索相关问题的任何人,我留下答复

以下命令打印OpenCV头文件的目录

pkg-config --cflags opencv
// -I/usr/local/include/opencv -I/usr/local/include
以下命令打印共享对象文件
(在下列情况下,位于
/usr/local/lib
目录下)
用于动态链接。
动态链接是链接您的可执行文件(如
main
file)
在运行时共享对象文件(如
.so
文件)

pkg-config --libs opencv
// -L/usr/local/lib -lopencv_cudabgsegm -lopencv_cudaobjdetect 
// -lopencv_cudastereo -lopencv_stitching -lopencv_cudafeatures2d 
// -lopencv_superres -lopencv_cudacodec -lopencv_videostab 
// ...
您可以使用上面打印的依赖项
(头文件目录和共享对象文件)在您的编译命令中
通过编写
pkg-config--cflags-opencv
pkg-config--libs-opencv

g++ `pkg-config --cflags opencv` \
-o main \
/your_cpp_file_path/source.cpp \
`pkg-config --libs opencv`


请注意,
`
是反勾字符,而不是
'

linux命令中使用了backtick字符
在命令中使用命令结果的步骤

例如,此部分
pkg config--cflags opencv
被替换

由于
pkg-config--cflags-opencv

的结果,看起来您也在使用HighGUI模块,但没有链接…我将链接器修改为
pkg-config--cflags--libs-opencv-I/usr/include/opencv-lopencv\u core-lopencv\u HighGUI-lopencv\u imgcodecs
,但是,同样的错误仍然困扰着我。我的原始代码包括:#include#include#include似乎我找到了一个解决方案:
g++pkg配置--cflags opencv
-o
basename opencv.cpp.cpp
opencv.cpp`pkg配置--libs opencv
。我不知道这个神奇的
basename opencv.cpp.cpp``在这里做了什么,但它仍然有效:)谢谢你的灵感:)
g++ `pkg-config --cflags opencv` \
-o main \
/your_cpp_file_path/source.cpp \
`pkg-config --libs opencv`