解析的外部符号 - 错误用Matlab API

问题描述:

我试图读取C++与2008年MSVS一个.MAT文件,但构建一个简单的程序,我收到以下错误时:解析的外部符号 - 错误用Matlab API

1> ex3.obj:错误LNK2019:无法解析的外部符号功能_matClose引用_main 1> ex3.obj:错误LNK2019:在函数解析的外部符号_matOpen引用_main

我研究过谷歌以及它似乎是编译器无法链接到使用这个函数所需的库(matOpen和matClose)。我以前从未使用过外部库,但我尝试了在Google中找到的所有内容以添加Matlab库。我做了以下工作:

工具 - >选项 - >项目和解决方案 - > VC++目录 - >显示目录为:include文件 - >然后我添加了matlab目录的路径 - > C:\ Program Files文件\ MATLAB \ EXTERN \包括

我与库文件一样:C:\ Program Files文件\ MATLAB \ EXTERN \ LIB \ Win64的\微软

我也这样做,为项目: 右键单击项目 - >属性 - >配置属性 - > C/C++ - >常规 - >其他包含目录 - >并添加“C:\ Program Files \ MATLAB \ extern \ include \ win64“

然后我在链接器 - >常规 - >附加库目录 - >上添加了“C:\ Program Files \ MATLAB \ extern \ lib \ win64 \ microsoft”

所以我真的不用不知道问题出在哪里。这里是源代码,我试图建立:

#include <iostream> 
#include <stdio.h> 
#include <stdlib.h> 
#include <mat.h> 

int main(int argc, char *argv[]) 
{ 
const char *file = "mozart_part1.mat"; 
MATFile *pmat; 

pmat = matOpen(file, "r"); 
if(pmat == NULL) 
{ 
    std::cout << "Error: could not open MAT-file!"; 
    return(1); 
} 
matClose(pmat); 
} 

你能看到或猜到我做

任何错误看看here。 完成这些步骤。

我想你已经错过的是第7步:

7.Locate the .lib files for the compiler you are using under matlabroot\extern\lib\win32\microsoft or matlabroot\extern\lib\win64\microsoft. Under Linker Input properties, add libmx.lib, libmex.lib, and libmat.lib as additional dependencies.

编辑:

Matlab的都和Visual C++应该是32位或64位。有两种选择:

  1. 从另一个32位的Matlab找到这3个lib文件。改为指向你的链接器。
  2. 使你的Visual C++ 64位。请参阅here它是如何完成的。

解决方案: 最终什么工作是选项2,使用带有说明this链接。

+0

感谢您的快速回复!我也添加了这些文件以及...我不想编译一个mex文件我只想读取一个.mat向量在C++数组中的信息。希望,你可以想出另一个解决这个问题的方法。非常感谢! – 2012-02-29 15:01:22

+0

@DominikKoller在添加这些库后会更改错误消息吗? – 2012-02-29 15:16:51

+0

@DominikKoller同样尝试按照第5步:在包含'mex.h'之前添加'#define MATLAB_MEX_FILE'。不知道它应该帮助,但也许..此外,你可以尝试创建一个mex文件,只是为了看看是否存在必要的库。 – 2012-02-29 15:19:34

我解决了这个问题!

@Michael Litvin:你说的对!我不知道你必须将MSVS 2008切换到x64平台。

由于Matlab库是作为x64二进制文件提供的,所以您也必须将MSVS编译器切换到x64。我遵循以下步骤来做到这一点:http://software.intel.com/en-us/articles/configuring-microsoft-visual-studio-for-64-bit-applications/

感谢您的帮助!

+0

很棒:)你可能想在这个答案中回答一个评论,因为它基本上是一样的..我会编辑添加你的链接 – 2012-03-01 16:55:48