有没有人知道如何在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,但是我尝试了很多不同的方法,但仍然无法处理它。
我希望有人可以帮我弄清楚如何使用它。
感谢。
志成
答案 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:
。