我在C ++中编写了一个名为FaceTracker.cpp的代码和Matlab中的其他代码,用于执行一些分析和静态分析。
我需要做的是在matlab中添加一个按钮,在按下时调用FaceTracker。我尝试使用以下命令:
system (['FaceTracker.exe <' nameOfVideo]);
但它不起作用。它打开FaceTracker.exe GUI,然后停止! (就像当Internet Explorer或任何其他程序有时\挂起时)与msg“FaceTracker.exe停止工作。
当我尝试从命令提示符运行.exe时,它向我显示以下错误:
Assertion Faile: Type == IO::TRACKER ... Debug error! R6010 - abort() has been called.
从我的答案中得到的答案\其他网站是我需要静态链接库。 我在一个网站上读到我需要进行以下更改:
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 *)" (?Load@Tracker@FACETRACKER@@QAEXPBD@Z) 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)" (?_Tidy@?$_Yarn@D@std@@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)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) 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 \停止工作? 提前谢谢。
答案 0 :(得分:0)
这几乎肯定与调试与发布无关或是否启用了mt。您没有使用matlab扩展,只是使用命令行中的二进制文件。如果在从命令行输入内容时程序可以正常工作,那么在从Matlab调用时它应该可以工作,除非你的内存不足(非常不太可能)。
我会检查一下的内容。 。
['FaceTracker.exe < ' InputVid]
...并将字符串直接复制并粘贴到命令行(系统,而不是Matlab)中,以查看是否可以复制错误。最有可能发生错误,因为您的exe没有很好地处理文件字符串。
尝试将inputvid,调用m文件和FaceTracker.exe放在工作目录中,以制作最简单的方案。如果这样做,通过将输入vid放入另一个目录并从那里捕获bug来使事情变得更复杂。
祝你好运!
答案 1 :(得分:0)
我认为这个exe文件依赖于其他一些库。您应该将它们复制到系统参数PATH中的一个目录中。或者,您可以在构建项目时使用静态链接选项。
答案 2 :(得分:0)
您的应用程序不需要安装整个Visual C ++编译器,只需要安装运行时库。 Microsoft有一个免费的可再发行组件,可以将此运行时库添加到任何计算机。您可以在Visual C ++安装路径中找到vcredist_x86.exe,或从http://www.microsoft.com/en-us/download/details.aspx?id=8328下载