虽然用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 ^____________^*