如何在ubuntu 18.04中正确配置与opencv的链接g ++?

问题描述 投票:0回答:1

我是opencv的新手。而且我发现应该使用pkg-config --cflags --libs opencv -lopencv_core -lopencv_imgcodecs来顺利编译。但我只是不知道为什么在编译时保持得到“未定义的引用”错误,输出结果和我的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

2.对于Makefile:

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 ubuntu g++ libraries
1个回答
0
投票

对于搜索相关问题的任何人,我都会留下回复。

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

pkg-config --cflags opencv
// -I/usr/local/include/opencv -I/usr/local/include

以下命令打印共享对象文件 (在以下情况下的/usr/local/lib目录下) 用于动态链接。 动态链接是链接您的可删除文件(如main文件) 在运行时共享目标文件(如.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 opencvpkg-config --libs opencv

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


请注意,`是反复的角色,而不是' 使用linux命令中的反引号字符 在命令中使用命令的结果

例如,这部分pkg-config --cflags opencv被替换 与pkg-config --cflags opencv的结果

© www.soinside.com 2019 - 2024. All rights reserved.