我在mex文件中有一些问题

时间:2015-02-21 05:02:39

标签: c matlab visual-studio-2012

我在我的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. 

我该如何修理它们?

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

指定此库的路径

2 个答案:

答案 0 :(得分:0)

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

在任何情况下,makefile(或命令行)中的link语句都需要包含相应的库。

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

-LpathToLibrary -lshortLibraryName

例如正在使用数学库

在源文件中:

#include <math.h>

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

-I/usr/include

并在链接命令中添加以下内容

-L/usr/lib/   -lm

对于Windows操作系统,对于不同的编译器,细节会有所不同。

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

答案 1 :(得分:0)

这个特殊的示例ex_sdp1.c是LINDO API C / C ++示例的一部分,它是一个现成的Matlab就绪代码,您可以使用'mex'构建。

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