MATLAB中mexC++代码,.a静态链接库的用法

来源:互联网 发布:谱聚类 ncut算法那 编辑:程序博客网 时间:2024/05/29 16:59
前两天在GitHub上找到一个MATLAB项目,想在电脑上跑一跑,结果发现运行时总是发现报错:“Undefined function or variable 'faac_wrapper'.”,后来发现这个函数是用C++写的,然后就去查MATLAB里面怎么用C++代码,然后用编译C++代码的时候,又报错发现很奇怪的错误,显示有很多函数没有定义,然后去看头文件,发现这些函数在头文件中都有声明,编译的时候找不到函数定义。仔细看了文件夹的文件,发现有一个后缀名是.a的文件上网查到,这是Linux的静态链接库文件,显然要在Linux上面装MATLAB,费了半天劲装好(过程不说了,网上都有)。然后继续mex我的cpp文件:mex faac_wrapper.cpp -I/mnt/hgfs/Linux_Share/matlab/faac_mex/libs -L/mnt/hgfs/Linux_Share/matlab/faac_mex -llibfaac,发现还是连接不上,在MATLAB的help上看了也没发现是哪里不对,但我感觉肯定是连接静态链接库的时候出问题了,这个时候我就瞎试,最后发现是静态库文件名的写法上有问题,我的静态链接库的名字是libfaac.a,其实静态链接库的命名规则是lib+libname.a,那个libname是你可以自己命名的,所以在连接的时候只需要写-lfaac就可以了,lib和.a都不用加,前面-l后面的路径是静态库的头文件所在的路径,后面-L后面的路径是你的静态链接库的路径,然后mex成功之后生成.mexa64文件,你就可以在m文件里面使用这个函数了。
1 0