无法在matlab cmex函数中将dll链接到mexfunction

时间:2014-07-22 12:57:28

标签: matlab dll mex

有没有人知道如何在Mex命令中链接dll或lib?

我有一个C代码链接GHXDLL.dll和GHXDLL.lib的外部函数。我在头文件中定义了外部函数,用于生成dll和lib。

typedef struct GHX{
    double output[28];
    int val;
}GHX;
#ifdef __cplusplus
extern "C" {  // only need to export C interface if
    // used by C++ source code
#endif
#ifdef GHXDLL_EXPORTS
#define MATHFUNCSDLL_API __declspec(dllexport) 
#else
#define MATHFUNCSDLL_API __declspec(dllimport) 
#endif
    MATHFUNCSDLL_API void GHXfunction(double *XIN, double *parameter, int mode, int hour, GHX *result);
#ifdef __cplusplus
}
#endif

我编写了一个测试代码,通过链接到lib和dll调用此函数,它可以工作。同时,我为Mex API编写了一个简单的测试代码,然后通过

从命令行编译它

mex test.c

它有效。

然后,我遇到了问题。当我将外部函数添加到Mex API并使用以下命令在matlab中编译时,它会失败。

mex -largeArrayDims -I'c:\Users\zzhang\API' -L'c:\Users\zzhang\API'  -lGHXDLL  GHXCmexAPI.c

错误是:

Error using mex
   Creating library GHXCmexAPI.lib and object GHXCmexAPI.exp
GHXCmexAPI.obj : error LNK2019: unresolved external symbol __imp_GHXfunction referenced in function mexFunction
GHXCmexAPI.mexw64 : fatal error LNK1120: 1 unresolved externals

我知道这个错误意味着mexfunction没有链接到带有外部函数的lib,但是我尝试了很多不同的方法,但仍然无法处理它。

我希望有人可以帮我弄清楚如何使用它。

感谢。

志成

1 个答案:

答案 0 :(得分:0)

按名称列出DLL导入库文件,而不是通过-l。还要添加-v并检查link.exe命令行:

mex -v -largeArrayDims -I'c:\Users\zzhang\API' -L'c:\Users\zzhang\API' ...
        GHXCmexAPI.c GHXDLL.lib

检查link命令时,还要验证包含DLL的文件夹中是否有/LIBPATH: