我在 mex 文件中有一些问题

i have some problems in mex file

我在我的 C 代码中使用了 Lindo 软件,我想用 Matlab 混合它。

我在使用 mex 文件时遇到了这些问题:

 mex ex_sdp1.c
   Creating library C:\Users\AZINRA~1\AppData\Local\Temp\mex_n9pt9A\templib.x and object C:\Users\AZINRA~1\AppData\Local\Temp\mex_n9pt9A\templib.exp 
ex_sdp1.obj : error LNK2019: unresolved external symbol LScreateEnv referenced in function mexFunction 
ex_sdp1.obj : error LNK2019: unresolved external symbol LScreateModel referenced in function mexFunction 
ex_sdp1.obj : error LNK2019: unresolved external symbol LSdeleteEnv referenced in function mexFunction 
ex_sdp1.obj : error LNK2019: unresolved external symbol LSdeleteModel referenced in function mexFunction 
ex_sdp1.obj : error LNK2019: unresolved external symbol LSloadLicenseString referenced in function mexFunction 
ex_sdp1.obj : error LNK2019: unresolved external symbol LSgetVersionInfo referenced in function mexFunction 
ex_sdp1.obj : error LNK2019: unresolved external symbol LSgetErrorMessage referenced in function mexFunction 
ex_sdp1.obj : error LNK2019: unresolved external symbol LSloadInstruct referenced in function mexFunction 
ex_sdp1.obj : error LNK2019: unresolved external symbol LSoptimizeQP referenced in function mexFunction 
ex_sdp1.obj : error LNK2019: unresolved external symbol LSgetInfo referenced in function mexFunction 
ex_sdp1.obj : error LNK2019: unresolved external symbol LSgetPrimalSolution referenced in function mexFunction 
ex_sdp1.obj : error LNK2019: unresolved external symbol LSgetDualSolution referenced in function mexFunction 
ex_sdp1.obj : error LNK2019: unresolved external symbol LSgetVariableNamej referenced in function mexFunction 
ex_sdp1.obj : error LNK2019: unresolved external symbol LSgetConstraintNamei referenced in function mexFunction 
ex_sdp1.obj : error LNK2019: unresolved external symbol LSsetModelLogfunc referenced in function mexFunction 
ex_sdp1.mexw64 : fatal error LNK1120: 15 unresolved externals 

  C:\PROGRA~1\MATLAB\R2013A\BIN\MEX.PL: Error: Link of 'ex_sdp1.mexw64' failed. 

我该如何修复它们?

我的包含文件在路径 C:\Lindoapi\include 中,库在 C:\Lindoapi\lib\win32\lindo9_0.lib 所以我添加了这些句子: ' mex ex_sdp1.c -L 用 'Microsoft Visual C++ 2012' 构建。 使用 mex 时出错 访问被拒绝。 墨西哥 ex_sdp1.c -L -l 使用 mex 时出错 MEX 找不到用 -l 选项指定的库“”。 MEX 查找具有以下名称之一的文件: .lib lib.lib 请使用 -L 选项指定此库的路径。
墨西哥 ex_sdp1.c -L -I 用 'Microsoft Visual C++ 2012' 构建。 使用 mex 时出错 访问被拒绝。 墨西哥 ex_sdp1.c -L -I -l 使用 mex 时出错 MEX 找不到用 -l 选项指定的库“”。 MEX 查找具有以下名称之一的文件: .lib lib.lib 请使用 -L 选项指定此库的路径'

这些函数名称不是标准的 C 函数,可能来自某些 windows 相关库。

无论如何,makefile(或命令行)中的 link 语句需要包含适当的库。

对于 gcc,在 linux 上,将通过将以下参数附加到 link 将文件放在一起的语句来包含库

-LpathToLibrary -lshortLibraryName

例如当时正在使用的数学库

在源文件中:

#include <math.h>

并在编译命令中追加以下内容

-I/usr/include

并在 link 命令中附加以下内容

-L/usr/lib/   -lm

对于 windows OS,对于不同的编译器,细节会有所不同。

例如,如果使用 visual studio,库路径和库名称以及包含文件路径将成为当前项目设置的一部分

这个特定的样本 ex_sdp1.c 是 LINDO API C/C++ 样本的一部分,它是 不是 一个现成的-shelf 可以使用 'mex' 构建的 Matlab 就绪代码。

首先,尝试将示例构建并 运行 作为独立应用程序,即在 Matlab 框架之外。一旦成功,您实际上可以以 M 文件的形式编写同一应用程序的 Matlab 版本。有几个使用 LINDO API 的 Matlab 示例(M 文件)来自使用 'mxlindo' 接口的 Matlab。说明如何使用 'mxlindo' 的 Matlab 示例在 'lindoapi/matlab' 下。查看 'lindoapi/matlab/readme.txt' 以快速入门。