нерешенный внешний символ - ошибка при использовании Matlab API - PullRequest
1 голос
/ 29 февраля 2012

Я пытаюсь прочитать .mat-файл в C ++ с MSVS 2008, но при создании простой программы я получаю следующую ошибку:

1> ex3.obj: ошибка LNK2019: неразрешенный внешний символ _matClose, на который ссылается функция _main 1> ex3.obj: ошибка LNK2019: неразрешенный внешний символ _matOpen, указанный в функции _main

Я также исследовал Google, и кажется, что компилятор не может ссылаться на библиотеки, необходимые для использования этих функций (matOpen и matClose). Я никогда раньше не использовал внешнюю библиотеку, но я попробовал все, что нашел в Google, чтобы добавить библиотеки Matlab. Я сделал следующее:

ИНСТРУМЕНТЫ -> Параметры -> Проекты и решения -> Каталоги VC ++ -> Показать каталоги для: включаемых файлов -> затем я добавил путь к каталогу включения Matlab -> C: \ Program Files \ MATLAB \ ехЬегп \ включают

Я сделал то же самое с файлами библиотеки: C: \ Program Files \ MATLAB \ extern \ lib \ win64 \ microsoft

Я также сделал это для проекта: Щелкните правой кнопкой мыши по проекту -> Свойства -> Свойства конфигурации -> C / C ++ -> Общие -> Дополнительные каталоги включения -> и добавьте «C: \ Program Files \ MATLAB \ extern \ include \ win64»

Затем я сделал то же самое в Linker -> General -> Additional Library Directory -> и добавил «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 ]

3 голосов
/ 29 февраля 2012

Взгляните здесь .Пройдите шаги.

Я думаю, что вы пропустили шаг 7:

7. Найдите .lib-файлы для компилятора, который вы используете, в папке matlabroot \ extern \ lib\ win32 \ microsoft или matlabroot \ extern \ lib \ win64 \ microsoft.В свойствах ввода компоновщика добавьте libmx.lib, libmex.lib и libmat.lib в качестве дополнительных зависимостей.

Изменить:

И Matlab, и Visual C ++должен быть 32-битным или 64-битным.Есть два варианта:

  1. Найти эти 3 файла lib из другого Matlab, который является 32-битным.Вместо этого направьте туда свой компоновщик.
  2. Сделайте ваш Visual C ++ 64-битным.См. здесь как это делается.

Решение: В конечном итоге сработал вариант 2 с использованием этой ссылки с инструкциями.

0 голосов
/ 01 марта 2012

Я решил проблему!

@ Майкл Литвин: ты был прав! Я не знал, что вам нужно переключить MSVS 2008 на платформу x64.

Поскольку библиотеки Matlab предоставляются в виде двоичных файлов x64, вам также необходимо переключить ваш компилятор MSVS на x64. Я сделал следующие шаги, чтобы сделать это: http://software.intel.com/en-us/articles/configuring-microsoft-visual-studio-for-64-bit-applications/

Спасибо за помощь!

...