如何无需Makefile编译包含OpenCV库的C++代码?
无需Makefile编译OpenCV C++代码的解决方法
问题核心
你遇到的头文件找不到问题,大概率是OpenCV源码编译后,头文件实际路径和配置的includePath不匹配。先确认路径,再通过命令行或VS Code配置解决编译问题,完全可以不用Makefile。
第一步:确认OpenCV头文件的实际位置
源码编译安装的OpenCV4,头文件通常放在/usr/local/opencv4/include/opencv4/目录下(内部才是opencv2文件夹)。用以下命令验证:
find /usr/local/opencv4 -name opencv.hpp
如果输出类似/usr/local/opencv4/include/opencv4/opencv2/opencv.hpp,说明你之前的includePath少了/opencv4这一层,需要修正。
第二步:修正VS Code的includePath配置
打开VS Code的settings.json(快捷键Ctrl+,,搜索includePath),把路径改成:
"includePath": [ "/usr/local/opencv4/include/opencv4/**", "${default}" ]
这样VS Code就能正确索引到opencv2/opencv.hpp了。
第三步:直接用g++命令行编译
不用Makefile的话,直接在终端用g++命令编译代码,需指定头文件路径、库路径和要链接的OpenCV库:
g++ your_code.cpp -o opencv_demo -I/usr/local/opencv4/include/opencv4 -L/usr/local/opencv4/lib -lopencv_core -lopencv_imgcodecs -lopencv_highgui
-I:指定头文件搜索目录-L:指定库文件搜索目录-l:链接对应的OpenCV库(代码用到了imread、imshow等,需要core、imgcodecs、highgui这几个库)
编译完成后运行程序:
./opencv_demo
如果提示找不到共享库,临时设置环境变量:
export LD_LIBRARY_PATH=/usr/local/opencv4/lib:$LD_LIBRARY_PATH
要永久生效,把上面的命令加到~/.bashrc文件末尾,再执行source ~/.bashrc。
第四步:配置VS Code自动编译任务
如果不想每次敲命令,可配置VS Code的tasks.json实现一键编译:
- 按Ctrl+Shift+B,选择「创建tasks.json文件」
- 选择「C/C++: g++ 生成活动文件」
- 替换tasks.json内容为:
{ "version": "2.0.0", "tasks": [ { "type": "cppbuild", "label": "C/C++: g++ 编译OpenCV代码", "command": "/usr/bin/g++", "args": [ "-fdiagnostics-color=always", "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}", "-I/usr/local/opencv4/include/opencv4", "-L/usr/local/opencv4/lib", "-lopencv_core", "-lopencv_imgcodecs", "-lopencv_highgui" ], "options": { "cwd": "${fileDirname}" }, "problemMatcher": ["$gcc"], "group": { "kind": "build", "isDefault": true }, "detail": "编译器: /usr/bin/g++" } ] }
之后按Ctrl+Shift+B就能一键编译当前代码,编译后的程序在当前目录下。
内容的提问来源于stack exchange,提问作者ilkinimanov
相关产品推荐
相关产品推荐

