0

我用 C++ 编写了一个名为 FaceTracker.cpp 的代码,并在 Matlab 中编写了其他代码来进行一些分析和静态分析。

我需要做的是在 matlab 中添加一个按钮,在按下时调用 FaceTracker。我尝试使用以下命令:

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

但它不起作用。它打开 FaceTracker.exe GUI,然后停止!(就像 Internet Explorer 或任何其他程序有时会\挂起)带有消息“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 调用它时我的程序会打开,然后挂起\停止工作?预先感谢。

4

3 回答 3

0

您的应用程序不需要安装整个 Visual C++ 编译器,只需要安装运行时库。Microsoft 有一个免费的可再发行组件,可以将此运行时库添加到任何计算机。您可以在 Visual C++ 安装路径中找到 vcredist_x86.exe,或从http://www.microsoft.com/en-us/download/details.aspx?id=8328下载

于 2012-05-01T13:15:43.673 回答
0

这几乎可以肯定与调试与发布或是否启用 mt 无关。您不是在制作 matlab 扩展,只是使用命令行中的二进制文件。如果程序在您从命令行输入内容时可以工作,那么在从 Matlab 调用时它应该可以工作,除非您的内存不足(也极不可能)。

我会检查 . .

['FaceTracker.exe < ' InputVid]

...并将字符串直接复制并粘贴到命令行(系统,而不是 Matlab)中,看看是否可以复制错误。该错误很可能发生,因为您的 exe 没有很好地处理文件字符串。

尝试将 inputvid、调用 m 文件和 FaceTracker.exe 放在工作目录中,以制作最简单的场景。如果可行,请将输入 vid 放入另一个目录并从那里寻找错误,从而使事情变得更复杂。

祝你好运!

于 2012-04-30T19:16:23.110 回答
0

我认为这个 exe 文件依赖于其他一些库。您应该将它们复制到系统参数 PATH 中的目录之一。或者您可以在构建项目时使用静态链接选项。

于 2012-04-30T19:53:43.950 回答