Matlab | mex混编多个cpp文件

本文记录了在使用Matlab进行多个CPP文件混编过程中遇到的问题及解决方法,详细介绍了如何逐步定位并解决链接错误,最终实现成功编译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


虽然用Matlab混编有一段时间了,但今天还是第一次遇见多个Cpp文件互相调用的情况。


我要对disparity_mex.cpp重新编译时,报出错信息:

错误使用 mex
   正在创建库 disparity_mex.lib 和对象 disparity_mex.exp
disparity_mex.obj : error LNK2019: 无法解析的外部符号 "void __cdecl stereo(unsigned char *,unsigned char
*,unsigned char *,int,bool,int,int)" (?stereo@@YAXPEAE00H_NHH@Z),该符号在函数 mexFunction 中被引用
disparity_mex.mexw64 : fatal error LNK1120: 1 个无法解析的外部命令


上网搜索解决办法,看到只要把其余的cpp文件一起编译,如上面报错中提到的stereo函数实际定义在stereo.cpp里,因而要一起编译则输入:mex disparity_mex.cpp stereo.cpp 即可。我以为已经OK啦,然而。。。出现下面的:= =

错误使用 mex
   正在创建库 disparity_mex.lib 和对象 disparity_mex.exp
stereo.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl
qx_nonlocal_cost_aggregation::~qx_nonlocal_cost_aggregation(void)"
(??1qx_nonlocal_cost_aggregation@@QEAA@XZ),该符号在函数 "void __cdecl stereo(unsigned char *,unsigned char
*,unsigned char *,int,bool,int,int)" (?stereo@@YAXPEAE00H_NHH@Z) 中被引用
stereo.obj : error LNK2019: 无法解析的外部符号 "void __cdecl qx_saveimage(char *,unsigned char *,int,int,int)"
(?qx_saveimage@@YAXPEADPEAEHHH@Z),该符号在函数 "void __cdecl stereo(unsigned char *,unsigned char
*,unsigned char *,int,bool,int,int)" (?stereo@@YAXPEAE00H_NHH@Z) 中被引用
stereo.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl
qx_nonlocal_cost_aggregation::disparity(unsigned char * *,bool)"
(?disparity@qx_nonlocal_cost_aggregation@@QEAAHPEAPEAE_N@Z),该符号在函数 "void __cdecl stereo(unsigned char
*,unsigned char *,unsigned char *,int,bool,int,int)" (?stereo@@YAXPEAE00H_NHH@Z) 中被引用
stereo.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl qx_timer::time_display(char *,int)"
(?time_display@qx_timer@@QEAAXPEADH@Z),该符号在函数 "void __cdecl stereo(unsigned char *,unsigned char
*,unsigned char *,int,bool,int,int)" (?stereo@@YAXPEAE00H_NHH@Z) 中被引用
stereo.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl
qx_nonlocal_cost_aggregation::matching_cost(unsigned char * * *,unsigned char * * *)"
(?matching_cost@qx_nonlocal_cost_aggregation@@QEAAHPEAPEAPEAE0@Z),该符号在函数 "void __cdecl
stereo(unsigned char *,unsigned char *,unsigned char *,int,bool,int,int)" (?stereo@@YAXPEAE00H_NHH@Z)
中被引用
stereo.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl qx_timer::start(void)"
(?start@qx_timer@@QEAAXXZ),该符号在函数 "void __cdecl stereo(unsigned char *,unsigned char *,unsigned char
*,int,bool,int,int)" (?stereo@@YAXPEAE00H_NHH@Z) 中被引用
stereo.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl
qx_nonlocal_cost_aggregation::init(int,int,int,double,double,double,double)"
(?init@qx_nonlocal_cost_aggregation@@QEAAHHHHNNNN@Z),该符号在函数 "void __cdecl stereo(unsigned char
*,unsigned char *,unsigned char *,int,bool,int,int)" (?stereo@@YAXPEAE00H_NHH@Z) 中被引用
stereo.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl
qx_nonlocal_cost_aggregation::qx_nonlocal_cost_aggregation(void)"
(??0qx_nonlocal_cost_aggregation@@QEAA@XZ),该符号在函数 "void __cdecl stereo(unsigned char *,unsigned char
*,unsigned char *,int,bool,int,int)" (?stereo@@YAXPEAE00H_NHH@Z) 中被引用
disparity_mex.mexw64 : fatal error LNK1120: 8 个无法解析的外部命令


所以,每一个cpp都是有故事的啊!所以,我就干脆把看见的cpp都一同编译了:

mex disparity_mex.cpp qx_basic.cpp qx_mst_kruskals_image.cpp qx_nonlocal_cost_aggregation.cpp qx_ppm.cpp qx_tree_filter.cpp stereo.cpp

然而。。。依旧报错:

错误使用 mex
   正在创建库 disparity_mex.lib 和对象 disparity_mex.exp
qx_tree_filter.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl
qx_mst_kruskals_image::qx_mst_kruskals_image(void)" (??0qx_mst_kruskals_image@@QEAA@XZ),该符号在函数
"public: __cdecl qx_tree_filter::qx_tree_filter(void)" (??0qx_tree_filter@@QEAA@XZ) 中被引用
qx_tree_filter.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl
qx_mst_kruskals_image::mst(unsigned char *,bool)" (?mst@qx_mst_kruskals_image@@QEAAHPEAE_N@Z),该符号在函数
"public: int __cdecl qx_tree_filter::build_tree(unsigned char *)"
(?build_tree@qx_tree_filter@@QEAAHPEAE@Z) 中被引用
qx_tree_filter.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl
qx_mst_kruskals_image::~qx_mst_kruskals_image(void)" (??1qx_mst_kruskals_image@@QEAA@XZ),该符号在函数
"public: __cdecl qx_tree_filter::~qx_tree_filter(void)" (??1qx_tree_filter@@QEAA@XZ) 中被引用
qx_tree_filter.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl
qx_mst_kruskals_image::init(int,int,int,int)" (?init@qx_mst_kruskals_image@@QEAAHHHHH@Z),该符号在函数
"public: int __cdecl qx_tree_filter::init(int,int,int,double,int)"
(?init@qx_tree_filter@@QEAAHHHHNH@Z) 中被引用
qx_nonlocal_cost_aggregation.obj : error LNK2019: 无法解析的外部符号 ctmf,该符号在函数 "public: int __cdecl
qx_nonlocal_cost_aggregation::disparity(unsigned char * *,bool)"
(?disparity@qx_nonlocal_cost_aggregation@@QEAAHPEAPEAE_N@Z) 中被引用
disparity_mex.mexw64 : fatal error LNK1120: 5 个无法解析的外部命令


哈哈哈,因为我漏掉了一个c文件。。。加上:

mex disparity_mex.cpp qx_basic.cpp qx_mst_kruskals_image.cpp qx_nonlocal_cost_aggregation.cpp qx_ppm.cpp qx_tree_filter.cpp stereo.cpp ctmf.c

就编译通过啦!哇哈哈哈~小技巧,记上一笔~



题外话:过了春节,胖了很多,重回书桌,大家一起加油啊!哇哈哈哈~开始谱写我的请回答2017 ^____________^*








评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值