未解析的外部符号 - 使用Matlab API时出错

时间:2012-02-29 13:54:40

标签: matlab external libraries

我正在尝试使用MSVS 2008在C ++中读取.mat文件,但在构建简单程序时,我收到以下错误:

1> ex3.obj:错误LNK2019:函数_main中引用的未解析的外部符号_matClose 1> ex3.obj:错误LNK2019:函数_main中引用的未解析的外部符号_matOpen

我也研究过Google,似乎编译器无法链接到使用此函数所需的库(matOpen和matClose)。我之前从未使用过外部库,但我尝试了在Google中找到的所有内容,以添加Matlab库。我做了以下事情:

工具 - >选项 - >项目和解决方案 - > VC ++目录 - >显示以下目录:include files - >然后我添加了matlab包含目录的路径 - > C:\ Program Files \ MATLAB \ extern \ include

我对库文件做了同样的事情:C:\ Program Files \ MATLAB \ extern \ lib \ win64 \ microsoft

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

然后我在Linker做了同样的事情 - >一般 - >其他图书馆目录 - >并添加了“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);
}

你能看到或猜出我犯的任何错误

2 个答案:

答案 0 :(得分:3)

看看here。 完成这些步骤。

我认为你错过的是第7步:

  

7.在matlabroot \ extern \ lib \ win32 \ microsoft或matlabroot \ extern \ lib \ win64 \ microsoft下找到您正在使用的编译器的.lib文件。在Linker Input属性下,添加libmx.lib,libmex.lib和libmat.lib作为附加依赖项。

修改

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

  1. 从另一个32位的Matlab中找到这3个lib文件。而是将链接器指向那里。
  2. 使您的Visual C ++ 64位。见here它是如何完成的。
  3. <强>解决方案: 最终有效的是选项2,使用this链接和说明。

答案 1 :(得分:0)

我解决了问题!

@Michael Litvin:你是对的!我不知道你必须将MSVS 2008转换为x64平台。

由于Matlab库是作为x64二进制文件提供的,因此您必须将MSVS编译器切换为x64。我按照以下步骤执行此操作:http://software.intel.com/en-us/articles/configuring-microsoft-visual-studio-for-64-bit-applications/

谢谢你的帮助!