使用G++编译基于OpenCV的C++脚本遇问题求助
解决OpenCV C++脚本编译失败的问题
核心问题:编译命令错误
你使用的编译命令中,pkg-config --cflags --libs opencv4未用反引号包裹,导致Shell不会执行该命令生成编译参数,反而将这些字符串直接传给g++,这才引发大量找不到头文件、未定义符号的错误。
正确编译命令
将命令修改为:
g++ test.cpp -o test `pkg-config --cflags --libs opencv4`
注意:包裹符号是键盘左上角的反引号(`),而非单引号或双引号,它会让Shell先执行pkg-config命令,将输出的编译参数(头文件路径、链接库)替换到命令中。
代码优化建议
你的代码有两处可调整以避免潜在问题:
- 移除重复头文件:
#include <opencv2/highgui/highgui.hpp>是OpenCV旧版本写法,opencv4中#include <opencv2/highgui.hpp>已包含所有highgui模块内容,重复包含会产生警告。 - 替换
namedWindow参数:将0换成WINDOW_NORMAL宏,这是opencv4推荐写法,明确表示窗口可调整大小。
修正后的代码:
#include <iostream> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> using namespace std; using namespace cv; int main() { Mat frame = imread("/Users/karsoneskind/Desktop/Programming/C++/ibootimformer/tests/image.jpg"); namedWindow("Output", WINDOW_NORMAL); namedWindow("Input", WINDOW_NORMAL); Mat output; resize(frame, output, Size(1000, 200), 0, 0); imshow("Output", output); imshow("Input", frame); waitKey(0); }
VSCode配置补充
若要在VSCode中直接编译,确保.vscode/c_cpp_properties.json的includePath包含OpenCV头文件路径:
{ "configurations": [ { "name": "Mac", "includePath": [ "${workspaceFolder}/**", "/opt/homebrew/Cellar/opencv/4.6.0/include/opencv4/" ], "defines": [], "macFrameworkPath": [ "/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks" ], "compilerPath": "/usr/bin/g++", "cStandard": "c17", "cppStandard": "c++17", "intelliSenseMode": "macos-gcc-x64" } ], "version": 4 }
同时在.vscode/tasks.json中配置正确的编译任务:
{ "version": "2.0.0", "tasks": [ { "label": "build", "type": "shell", "command": "g++ ${file} -o ${fileBasenameNoExtension} `pkg-config --cflags --libs opencv4`", "args": [], "group": { "kind": "build", "isDefault": true }, "problemMatcher": ["$gcc"], "detail": "Compile with g++ and opencv4" } ] }
内容的提问来源于stack exchange,提问作者The Sogie Man
相关产品推荐
相关产品推荐

