在调用mcc生成的库文件时出现的链接问题
我使用matlab的mcc生成了一个简单的C语言的接口文件主要包括add.h,add.lib,add.dll。主要是想在C中使用动态链接库的方法调用这个函数,其中.h包含.dll的导出函数声明,.lib包含.dll的符号库。使用步骤应该是在主程序中包含.h文件,再设置包含和库路径,把.lib文件添加到依赖库中,在主程序中调用就可以了(这样是不是对的?不对的话请大家指正)。然后我就发现了一个很奇怪的现象。在程序程序不使用也不包含.h文件时一切正常(我调用了一些matlab里的其他函数),但是程序加上了这些就链接无法通过了。下面是程序。
正常情况:
#include<stdio.h>
#include<mat.h>
#include<matrix.h>
int main()
{
double ans;
mxArray * pa1=mxCreateDoubleScalar(1.1);
mxArray * pa2=mxCreateDoubleScalar(2.2);
mxArray * pa3=mxCreateDoubleScalar(0.0);
mxArray * arrin[2]={pa1,pa2};
mxArray * arrout[1]={pa3};
ans=mxGetScalar(arrout[0]);
printf("%.2f",ans);
return 0;
}
这个程序完全没有问题。然后我只是多包括了一个头文件add.h,其他没有做任何改动,因为没有调用任何函数,如下:
#include<stdio.h>
#include<mat.h>
#include<matrix.h>
#include<add.h>//仅仅多了这一句
int main()
{
double ans;
mxArray * pa1=mxCreateDoubleScalar(1.1);
mxArray * pa2=mxCreateDoubleScalar(2.2);
mxArray * pa3=mxCreateDoubleScalar(0.0);
mxArray * arrin[2]={pa1,pa2};
mxArray * arrout[1]={pa3};
ans=mxGetScalar(arrout[0]);
printf("%.2f",ans);
return 0;
}
链接就出现了问题:
main.obj : error LNK2019: 无法解析的外部符号 mxGetScalar_proxy,该符号在函数 main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 mxCreateDoubleScalar_proxy,该符号在函数 main 中被引用
这好奇怪啊,上述的两个函数都不是add.h中声明的,问什么会出现这种情况?