2012-02-29 73 views
0

我試圖讀取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); 
} 

你能看到或猜到我做

回答

2

任何錯誤看看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

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/

感謝您的幫助!

+0

很棒:)你可能想在這個答案中回答一個評論,因爲它基本上是一樣的..我會編輯添加你的鏈接 – 2012-03-01 16:55:48