2012-04-30 3 views
0

Я написал код в C++ под названием FaceTracker.cpp и другой код в Matlab, которые выполняют некоторые анализы и статику.Вызов C++ .exe из Matlab - программа остановлена?

Что мне нужно сделать, это добавить кнопку в Matlab, которая вызывает FaceTracker при нажатии. Я попытался использовать следующую команду:

system (['FaceTracker.exe <' nameOfVideo]); 

но он не работает. Он открывает графический интерфейс FaceTracker.exe, а затем он останавливается! (Например, когда Internet Explorer или любая другая программа, иногда делает \ зависнуть) с сообщи «FaceTracker.e купировались работают

Когда я попытался запустить exe-файл из командной строки, он показал мне следующую ошибку:.

Assertion Faile: Type == IO::TRACKER ... Debug error! R6010 - abort() has been called. 

из того, что я understd из ответов \ других сайтов в том, что мне нужно статически связать библиотеки я прочитал в одном месте, что мне нужно сделать следующие изменения:.

The CRT: 
• Configuration Properties -> C/C++ -> Code Generation: Where it reads Runtime Library, change to Multi-Threaded (/MT). 

The manifest must go: 
• Configuration Properties -> Manifest Tool -> Input and Output: Where it reads Embed Manifest, change to No. 

Но когда я делаю это (изменение к/MT) Я начинаю получать следующие ошибки:

1> Generating Code... 1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library 1>libcpmtd.lib(xmbtowc.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW 1>Tracker.obj : error LNK2019: unresolved external symbol __CrtDbgReportW referenced in function "public: void 
__thiscall FACETRACKER::Tracker::Load(char const *)" ([email protected]@[email protected]@[email protected]) 1>libcpmtd.lib(stdthrow.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW 1>libcpmtd.lib(cout.obj) : error LNK2001: unresolved external symbol 
__CrtDbgReportW 1>libcpmtd.lib(cin.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW 1>IO.obj : error LNK2001: unresolved external symbol __CrtDbgReportW 1>Patch.obj : error LNK2001: unresolved external symbol __CrtDbgReportW 1>PAW.obj : error LNK2001: unresolved external symbol __CrtDbgReportW 1>PDM.obj : error LNK2001: unresolved external symbol __CrtDbgReportW 1>CLM.obj : error LNK2001: unresolved external symbol __CrtDbgReportW 1>FaceTracker.obj : error LNK2001: unresolved external symbol __CrtDbgReportW 1>FCheck.obj : error LNK2001: unresolved external symbol __CrtDbgReportW 1>FDet.obj : error LNK2001: unresolved external symbol __CrtDbgReportW 1>libcpmtd.lib(cin.obj) : error LNK2001: unresolved external symbol 
__free_dbg 1>libcpmtd.lib(xmbtowc.obj) : error LNK2001: unresolved external symbol __free_dbg 1>Tracker.obj : error LNK2001: unresolved external symbol __free_dbg 1>libcpmtd.lib(xdebug.obj) : error LNK2001: unresolved external symbol __free_dbg 1>libcpmtd.lib(locale0.obj) : error LNK2001: unresolved external symbol __free_dbg 1>libcpmtd.lib(cout.obj) : error LNK2001: unresolved external symbol 
__free_dbg 1>IO.obj : error LNK2001: unresolved external symbol __free_dbg 1>Patch.obj : error LNK2001: unresolved external symbol __free_dbg 1>PAW.obj : error LNK2001: unresolved external symbol __free_dbg 1>PDM.obj : error LNK2001: unresolved external symbol __free_dbg 1>CLM.obj : error LNK2019: unresolved external symbol __free_dbg referenced in function "private: void __thiscall std::_Yarn<char>::_Tidy(void)" ([email protected][email protected]@[email protected]@AAEXXZ) 1>FaceTracker.obj : error LNK2001: unresolved external symbol 
__free_dbg 1>FCheck.obj : error LNK2001: unresolved external symbol __free_dbg 1>FDet.obj : error LNK2001: unresolved external symbol __free_dbg 1>libcpmtd.lib(xdebug.obj) : error LNK2019: unresolved external symbol __malloc_dbg referenced in function "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char 
*,int)" ([email protected][email protected]@@[email protected]) 1>libcpmtd.lib(locale0.obj) : error LNK2001: unresolved external symbol __malloc_dbg 1>libcpmtd.lib(xmbtowc.obj) : error LNK2001: unresolved external symbol __malloc_dbg 1>libcpmtd.lib(_tolower.obj) : error LNK2019: unresolved external symbol __calloc_dbg referenced in function __Getctype 1>C:\Users\wew\Documents\Jam3a\PROJECT-2012!!\FindSymetryInFaces\FaceTracker\Debug\FaceTracker.exe : fatal error LNK1120: 4 unresolved externals 

Любые предложения? Что мне нужно сделать, чтобы использовать FaceTracker.exe на каждом компьютере, а также те, у которых нет компилятора C++ \ vs?

кроме того, почему моя программа ОТКРЫВАЕТСЯ, когда я называю это от matlab, но затем Hangs \ перестает работать? Благодарим заранее.

+1

is {InputVid} строка?Как вы выберете двоичный код из командной строки? – learnvst

+0

Да, строка, содержащая полный путь ... Я читал на каком-то сайте, что мы должны компилировать в «release», а не «отлаживать», и что мы должны изменить «библиотеку времени выполнения» в генерации кода на «многопоточную» ». но он не работал. когда я перехожу к «многопоточному», он показывает мне ошибки. –

ответ

0

Это почти наверняка не имеет ничего общего с отладочной версией или отключением mt. Вы не делаете расширение matlab, просто используя двоичный код из командной строки. Если программа работает, когда вы вводите вещи из командной строки, она должна работать при вызове из Matlab, если у вас мало памяти (также маловероятно).

Я рассмотрел бы содержимое. ,

['FaceTracker.exe < ' InputVid] 

... и скопируйте строку непосредственно в командную строку (система, не Matlab), чтобы увидеть, если вы можете повторить эту ошибку. Ошибка, скорее всего, происходит потому, что ваш exe не обрабатывает строку файла.

Попробуйте поместить в рабочий каталог файл ввода, вызывающий файл m, и FaceTracker.exe, чтобы сделать самый простой сценарий. Если это сработает, сделайте вещи более сложными, поместив входной файл vid в другой каталог и найдите там охоту за ошибками.

Удачи!

+0

Прежде всего спасибо за ответ. Когда я запускаю Facetracker из C++, он работает правильно. , но когда я пытаюсь запустить FaceTracker.exe (после копирования его в другую папку), он показывает мне следующее сообщение: Assertiong Faile: Type == IO :: TRACKER ... Ошибка отладки! R6010 - вызывается abort(). –

+0

Как создать файл FaceTracker.exe, который работает на всех компьютерах (даже те, которые не имеют компилятора C++ \ vs)? !! –

+0

Является ли ваш exe зависимым от любых DLL-файлов? – learnvst

0

Я думаю, что этот файл exe зависит от некоторых других библиотек. Вы должны скопировать их в один из каталогов в системном параметре PATH. Или вы можете использовать опцию статической ссылки при создании своего проекта.

+0

Как это сделать? (используйте параметр статической ссылки)? Я хочу, чтобы мой .exe-файл работал на каждом компьютере (даже те, которые не имеют компилятора C++ \ vs. –

0

Ваши приложения не требуют установки всего компилятора Visual C++, а всего лишь библиотеки времени выполнения. У Microsoft есть свободное распространение, которое может добавить эту библиотеку времени выполнения на любой компьютер. Вы можете найти vcredist_x86.exe на вашем пути установки Visual C++ или загрузить его с http://www.microsoft.com/en-us/download/details.aspx?id=8328

+0

Хорошо, но почему FaceTracker.exe Открывается, когда я вызываю его из Matlab, начинает работать, но потом зависает с сообщением: Facetracker .exe перестали работать, окна ищут решение ... –

+0

Вам понадобится один компьютер с MatLab и Visual Studio, чтобы отладить это. Когда ваша программа выйдет из строя, у вас будет возможность начать отладку, это позволяет отлаживать его, когда он запускает путь, когда Matlab запускает его. –

+0

Спасибо большое, я его загружу, но что меня смущает, что мне удалось позвонить FaceTracker.exe из MATLAB раньше, но это сработало, но из-за вирус, который мне пришлось отформатировать на моем компьютере, и теперь он не работает (он работает, но внезапно перестает работать). Я просто не могу вспомнить, есть ли какие-либо свойства, которые я должен изменить, кроме того, что я упомянул в этом вопросе. –

Смежные вопросы