问题背景:
用mcc -W cpplib:libname -T link:lib -v matlab_m_file.m
编译.m文件,生成vc可用的动态连接库和.h头文件,.ctf文件和.lib文件。.h文件提供的各个接口,它包括由.m文件生成的函数接口等。
现在我们就可以把生成的这几个文件加到我们的工程中,利用.h文件提供的接口来调用原.m文件中的函数。
问题描述:
若自己另写一个源文件(比如main.cpp),因为我们要在其中调用.m文件中函数,所以要include进上述生成的.h文件。
此时,在编译器链接时会报错:ImageExView.obj和ImageEx.obj中的mclcppMlfF重复定义
LNK2005: void __cdecl mclcppMlfF multiply defined
产生原因:
究其原因,发现在ImageExView.cpp会include一个matlab的头文件mclcppclass.h,而在mclcppclass.h中有mclcppMlfF的实现代码,它是类mwArray的一个友元函数。
当有ImageEx和ImageExView两个同时引用头文件时,当然在链接的时候会发现两个mclcppMlfF的实现,就会报重复定义错误了。
用mcc -W cpplib:libname -T link:lib -v matlab_m_file.m
编译.m文件,生成vc可用的动态连接库和.h头文件,.ctf文件和.lib文件。.h文件提供的各个接口,它包括由.m文件生成的函数接口等。
现在我们就可以把生成的这几个文件加到我们的工程中,利用.h文件提供的接口来调用原.m文件中的函数。
问题描述:
若自己另写一个源文件(比如main.cpp),因为我们要在其中调用.m文件中函数,所以要include进上述生成的.h文件。
此时,在编译器链接时会报错:ImageExView.obj和ImageEx.obj中的mclcppMlfF重复定义
LNK2005: void __cdecl mclcppMlfF multiply defined
产生原因:
究其原因,发现在ImageExView.cpp会include一个matlab的头文件mclcppclass.h,而在mclcppclass.h中有mclcppMlfF的实现代码,它是类mwArray的一个友元函数。
当有ImageEx和ImageExView两个同时引用头文件时,当然在链接的时候会发现两个mclcppMlfF的实现,就会报重复定义错误了。
"<1>.obj : error LNK2005: "void __cdecl mclcppMlfF(void *,char const *,int,int,int,...)" (?mclcppMlfF@@YAXPAXPBDHHHZZ) already defined in <2>.obj" |
解决办法:
我的解决办法:仅在一个.cpp文件中引用头文件。
另一个解决办法是:在mclcppclass.h 中添加
#ifndef OMT_mclcppMlfF void mclcppMlfF ... ... ... #endif |