使用MatlabAPI的未解析外部符号错误 我试图用MSV 2008读取C++中的.Mat文件,但是当构建一个简单的程序时,我会得到以下错误:

使用MatlabAPI的未解析外部符号错误 我试图用MSV 2008读取C++中的.Mat文件,但是当构建一个简单的程序时,我会得到以下错误:,matlab,external,libraries,Matlab,External,Libraries,1> ex3.obj:错误LNK2019:函数_main中引用的未解析外部符号_matClose 1> ex3.obj:错误LNK2019:未解析的外部符号_matOpen在函数_main中引用 我也研究过Google,似乎编译器无法链接到使用此函数所需的库(matOpen和matClose)。我以前从未使用过外部库,但我尝试了在Google中找到的所有东西来添加Matlab库。我做了以下工作: 工具-->选项-->项目和解决方案-->VC++目录-->显示:包含文件-->的目录,然后我添加了m

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

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

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

我对库文件也做了同样的操作:C:\ProgramFiles\MATLAB\extern\lib\win64\microsoft

我也为这个项目做了这些: 右键单击项目-->属性-->配置属性-->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);
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
const char*file=“mozart\u part1.mat”;
MATFile*pmat;
pmat=matOpen(文件“r”);
如果(pmat==NULL)
{
std::看一看。
完成这些步骤

我认为您错过了第7步:

7.在matlabroot\extern\lib\win32\microsoft或matlabroot\extern\lib\win64\microsoft下找到正在使用的编译器的.lib文件。在链接器输入属性下,添加libmx.lib、libmex.lib和libmat.lib作为其他依赖项

编辑:

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

  • 从另一个32位的Matlab中找到这3个lib文件。将链接器指向那里
  • 制作你的Visual C++ +64位。看看它是如何完成的。
  • 解决方案: 最终起作用的是选项2,使用带有说明的链接。

    我解决了这个问题

    @迈克尔·利文:你说得对!我不知道你必须把MSVS2008换成x64平台

    由于Matlab库是以x64二进制文件的形式提供的,因此您还必须将MSVS编译器切换到x64


    <谢谢你的快速回复!谢谢你的快速回复!我也确实添加了这些文件……我不想编译一个MEX文件。我只想在C++中读取一个.at向量的信息。希望,你可以想出另一个选项来解决这个问题。谢谢!ibs?@Dominikoller还尝试执行步骤5:在包含
    MEX.h
    之前添加
    #定义MATLAB#MEX_文件
    。不确定它是否有帮助,但可能……此外,您可以尝试创建一个MEX文件,看看是否存在必要的库。不,这是相同的错误消息。我不明白为什么要这样做,因为我不想构建一个库MEX文件?你是对的,它不会有帮助。我想检查库是否存在。无论如何,问题可能是你使用的是64位Matlab版本的32位编译器。也许你可以通过从32位Matlab中找到这些3*.lib文件来解决这个问题,然后一切都将是32位的。太好了:)你可能想让这个答案成为一个逗号nt在前面的回答线程中,因为它基本上是相同的。我将编辑以添加您的链接