【问题标题】:unresolved external symbol - Error using Matlab API未解析的外部符号 - 使用 Matlab API 时出错
【发布时间】:2012-02-29 13:54:39
【问题描述】:

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

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

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

工具 --> 选项 --> 项目和解决方案 --> VC++ 目录 --> 显示目录:包含文件 --> 然后我添加了 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 --> General --> Additional Library Directories --> 中做了同样的事情,并添加了“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);
}

你能看到或猜到我犯了什么错误

【问题讨论】:

    标签: matlab external libraries


    【解决方案1】:

    看看here。 完成这些步骤。

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

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

    编辑:

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

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

    解决方案: 最终奏效的是选项 2,使用带有说明的 this 链接。

    【讨论】:

    • 感谢您的快速回复!我也添加了这些文件......而且我不想编译 mex 文件,我只想读取 C++ 数组中的 .mat 向量的信息。希望,你可以想出另一种选择来解决这个问题。到目前为止谢谢!
    • @DominikKoller 添加这些库后错误消息是否已更改?
    • @DominikKoller 也尝试按照第 5 步操作:在包含 mex.h 之前添加 #define MATLAB_MEX_FILE。不确定它是否会有所帮助,但也许......另外,您可以尝试制作一个 mex 文件,看看是否存在必要的库。
    • 不,这是相同的错误消息。我不明白为什么要这样做,因为我不想构建 MEX 文件?
    • 你是对的,它没有帮助。我想检查图书馆是否存在。无论如何,问题可能是您使用的是带有 64 位 Matlab 版本的 32 位编译器。也许你可以通过从 32 位 Matlab 中找到这 3 个 *.lib 文件来解决这个问题,然后一切都是 32 位的。
    【解决方案2】:

    我解决了问题!

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

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

    感谢您的帮助!

    【讨论】:

    • 太棒了 :) 您可能希望在上一个答案线程中将此答案作为评论,因为它基本相同。我将编辑以添加您的链接
    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 2012-10-17
    • 2016-07-06
    • 1970-01-01
    • 2011-02-09
    相关资源
    最近更新 更多