在Jetson Nano上通过MATLAB部署SegNet-Predict时OpenCV头文件缺失报错求助
错误核心
执行MATLAB代码生成命令codegen('-config ', cfg, 'segnet_predict', '-args', {img},'-report');时,编译阶段出现如下错误:
STDERR: /home/remoteBuildDir/MATLAB_ws/R2021b/C/Users/DELL/Documents/MATLAB/segnet_deploy/main.cu:10:10: fatal error: opencv2/opencv.hpp: No such file or directory
#include "opencv2/opencv.hpp"
^~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [main.o] Error 1
make: *** Waiting for unfinished jobs....STDOUT: make: Entering directory '/home/remoteBuildDir/MATLAB_ws/R2021b/C/Users/DELL/Documents/MATLAB/segnet_deploy/codegen/exe/segnet_predict'
??? Build error: C++ compiler produced errors. See the Build Log for further details.
本质是MATLAB代码生成配置未正确指向Jetson Nano上的OpenCV头文件路径,以下是具体排查修复步骤:
确认Jetson Nano上OpenCV的实际路径
Jetson Nano通常通过JetPack预装OpenCV,先定位头文件和库文件位置:- 执行命令查找头文件根目录:
输出示例:find /usr -name "opencv.hpp"/usr/include/opencv4/opencv2/opencv.hpp,则头文件根目录为/usr/include/opencv4 - 执行命令确认库文件路径:
输出示例:pkg-config --libs opencv4-L/usr/lib/aarch64-linux-gnu -lopencv_core -lopencv_imgproc ...,则库路径为/usr/lib/aarch64-linux-gnu
- 执行命令查找头文件根目录:
修改MATLAB代码生成配置(cfg)
在执行codegen命令前,需为配置对象添加OpenCV的头文件、库路径及链接参数:- 若使用GPU代码配置(Jetson为CUDA设备,推荐):
% 初始化GPU可执行文件配置 cfg = coder.gpuConfig('exe'); % 添加OpenCV头文件路径 cfg.CustomInclude = [cfg.CustomInclude, '/usr/include/opencv4']; % 添加OpenCV链接库(根据实际需要调整库列表) cfg.CustomLibrary = [cfg.CustomLibrary, 'opencv_core opencv_imgproc opencv_imgcodecs opencv_highgui']; % 添加库文件路径 cfg.CustomLinkFlags = [cfg.CustomLinkFlags, '-L/usr/lib/aarch64-linux-gnu']; % 启用远程编译(针对Jetson远程部署场景) cfg.Hardware = coder.hardware('NVIDIA Jetson'); cfg.Hardware.BuildDir = '/home/remoteBuildDir/MATLAB_ws/R2021b/C/Users/DELL/Documents/MATLAB/segnet_deploy'; - 若使用普通C++配置:
cfg = coder.config('exe'); cfg.CustomInclude = [cfg.CustomInclude, '/usr/include/opencv4']; cfg.CustomLibrary = [cfg.CustomLibrary, 'opencv_core opencv_imgproc']; cfg.CustomLinkFlags = [cfg.CustomLinkFlags, '-L/usr/lib/aarch64-linux-gnu'];
- 若使用GPU代码配置(Jetson为CUDA设备,推荐):
验证远程编译环境变量(针对远程部署场景)
由于错误路径显示为远程编译目录,需确保Jetson端的环境变量包含OpenCV路径:- 在Jetson Nano终端执行:
export CPLUS_INCLUDE_PATH=/usr/include/opencv4:$CPLUS_INCLUDE_PATH export LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH - 重启MATLAB与Jetson的远程连接,确保环境变量生效
- 在Jetson Nano终端执行:
验证OpenCV本身的可用性
在Jetson Nano上编译测试程序,确认OpenCV安装正常:- 创建
test_opencv.cpp文件:#include <opencv2/opencv.hpp> int main() { cv::Mat test_img(100,100,CV_8UC3); return 0; } - 编译命令:
g++ test_opencv.cpp -o test_opencv `pkg-config --cflags --libs opencv4` - 若能成功生成可执行文件,说明OpenCV本身无问题,问题集中在MATLAB配置
- 创建
内容的提问来源于stack exchange,提问作者Abuzer javed

