在MATLAB中使用MEX编译库

时间:2015-06-17 22:52:03

标签: c++ matlab compilation shared-libraries mex

我想在我的C代码中使用外部库(这里是(高精度算术)库MPIR,但我想这个问题也适用于其他库),这是通过Matlab从MEX调用的。为此,我使用MinGW通过命令make,make install和make check来构建MPIR,这样做没有错误(尽管如此我还不能确定所有库是否都在正确的位置(参见下面描述的文件的位置) - 怎么能我测试了吗?)。现在我用头文件myfile.h设置了一个小的测试程序myfile.cpp,如下所示:

// this is myfile.cpp
#include "mex.h"
#include "mpir.h"
#include "myfile.h"
#include <stdio.h>

void myfile(double a)
{
    mpf_t b;
    mp_bitcnt_t bct = 350;
    double f = 10.0, g = 3.0;

    mpf_set_default_prec(bct);  
    mpf_init(b);
    mpf_set_d (b, f);
    gmp_printf("b is %.*Ff \n",120,b );
    mpf_clear(b);       
}

其中各种调用引用MPIR库的高精度类型,带头文件

// this is myfile.h
#include "mex.h"
#include "mpir.h"
#include <stdio.h>

void myfile(double a);

我希望通过mex文件mexlib.cpp调用此例程,其中包含:

// this is mexlib.cpp
#include "mex.h"
#include "mpir.h"
#include "myfile.h"
#include <stdio.h>

void mexFunction(
         int          nlhs,
         mxArray      *plhs[],
         int          nrhs,
         const mxArray *prhs[]
         )
{
    double a;
    a        = mxGetScalar(prhs[0]);        /* create pointer to the real data in the input arguments  */
    myfile(a);                              /* call the computational routine */    
    return;    
}

MPIR基目录是C:/MPIR/mpir-2.7.0/,在其中我可以看到文件mpir.h,gmp.h,libmpir.la等等,以及文件夹/.libs/, / mpf /,/ mpz /等。在/.libs/文件夹中,有libmpir.la,libmpir.dll.a,libmpir-16.dll,libmpir-3.dll.def等文件,但是例如。没有文件“libmpir.a”或libmpirdll.a“,这是我在这里学习其他一些问题时所寻求的。

在Matlab中,我尝试使用命令
通过mex编译它     mex -IC:/MPIR/mpir-2.7.0/-LC:/MPIR/mpir-2.7.0/.libs mexlib.cpp myfile.cpp -v或

    mex -IC:/MPIR/mpir-2.7.0/-LC:/MPIR/mpir-2.7.0/ mexlib.cpp myfile.cpp -v。

它回答错误说明:

"myfile.obj : error LNK2019: unresolved external symbol __imp___gmpf_clear referenced in function "void __cdecl myfile(double)" (?myfile@@YAXN@Z)"

和myfile.cpp中调用的其他函数的类似行,和 退出

"mexlib.mexw64 : fatal error LNK1120: 5 unresolved externals."  

mex documentation中,我读到标志-L和-l指向文件以.lib结尾的位置(在Windows上)。
如何将其指向“.h”文件 - 或者它不是我需要的?我试图添加一些路径到PATH环境变量,也是MinGW路径,这没有帮助 它是一台Windows 7 PC,Matlab找到的唯一编译器是Microsoft SDK 7.1。使用-v标志显示为“COMPILER = cl”...这是SDK吗?某处还有gcc(我想在MinGW文件夹中?) 我想我对C和编译器选项中的所有#includes,头文件结构感到困惑;那么,对我来说最大的帮助就是需要哪一个(最好用一个例子) 提前谢谢!

0 个答案:

没有答案