无法使 Flandmark 正常工作、C++、错误LNK2019、未解析的外部符号

Cant get Flandmarks to work, C++, Error LNK2019, Unresolved external symbol

提问人:Easyrider 提问时间:7/19/2013 更新时间:11/22/2013 访问量:1395

问:

我想测试 Flandmarks 的人脸检测 http://cmp.felk.cvut.cz/~uricamic/flandmark/ 但我无法让它工作。

我已经为此工作了大约 10 个小时。 我在 opencv.org 上寻求帮助(http://answers.opencv.org/question/16956/eye-detection-is-jumping/,问题首先是关于其他事情,如果您想阅读有关此问题的内容,请参阅评论)并得到了一些帮助,但问题仍然存在。

计算机:64 位,Windows 7,Visual Studio 2010。

我尝试过:

由于这个问题,我被要求尝试一个空项目,所以我这样做了。

我在 Visual Studio c++ 2010 中启动了一个空项目。 属性管理器-> 添加到 C/C++ -> 其他包含目录下:

* C:\Program Files (x86)\opencv\build\include
* C:\Program Files (x86)\opencv\build\include\opencv
* C:\Program Files (x86)\opencv\build\include\opencv2

Property manager-> LInker -> 其他包含目录 ->

* C:\Program Files (x86)\opencv\build\x64\vc10\lib;
* C:\Program Files (x86)\opencv\build\x64\vc10\bin; 
* %(AdditionalLibraryDirectories)

属性管理器 -> 链接器 -> 输入 -> 其他依赖项 ->

* opencv_calib3d244d.lib
* opencv_contrib244d.lib
* opencv_core244d.lib
* opencv_features2d244d.lib
* opencv_flann244d.lib
* opencv_gpu244d.lib
* opencv_haartraining_engined.lib
* opencv_highgui244d.lib
* opencv_imgproc244d.lib
* opencv_legacy244d.lib
* opencv_ml244d.lib
* opencv_nonfree244d.lib
* opencv_objdetect244d.lib
* opencv_photo244d.lib
* opencv_stitching244d.lib
* opencv_ts244d.lib
* opencv_video244d.lib
* opencv_videostab244d.lib

物业经理 -> 配置经理 -> ACtive 解决方案平台 ->

  • 从 win32 更改为“new”,其中我从 Itanium 更改为 x64。从“win32”复制设置

从您可以在 flandmarks 主页下载的 zip 文件中,我将文件复制到文件夹“libflandmark”中。添加到我的项目文件夹。我还将 dat 文件复制到项目文件夹。

* flandmark_detector.cpp
* flandmark_detector.h
* liblbp.cpp
* liblbp.h
* msvc-compat.h
* flandmark_model.dat

我创建了一个 main.cpp,我在其中添加了:

#include "stdio.h"
#include "flandmark_detector.h"


int main(int argc, char * argv[]) 
{ 
    printf("test");
    FLANDMARK_Model * model = flandmark_init("flandmark_model.dat");

    return 0;
}

在此之后,错误是:

1>  All outputs are up-to-date.
1>main.obj : error LNK2019: unresolved external symbol "struct model_struct * __cdecl flandmark_init(char const *)" (?flandmark_init@@YAPEAUmodel_struct@@PEBD@Z) referenced in function main
1>C:\projects\test_projects\flandmarks_empty\x64\Debug\flandmarks_empty.exe : fatal error LNK1120: 1 unresolved externals
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:04.47
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

感谢您的阅读!

C++ OpenCV 计算机视觉 未解析外部

评论

1赞 Peter L. 7/19/2013
尝试用 'extern “C” { }' 将 flandmark 头文件的 #include 括起来,然后重新生成。
0赞 Easyrider 7/19/2013
我尝试了user2585483s解决方案,它奏效了,但我很好奇'extern“C”{}'有什么作用?如果您有时间,请解释。感谢您抽出宝贵时间帮助我!
1赞 Peter L. 7/20/2013
好消息是,它使用答案中的建议起作用了。我曾认为它可能与“extern ”C“ {}”有关,因为它看起来像一个名称篡改问题。混合 C 和 C++ 代码时,编译器会破坏 C 函数名称。'extern “C” {}' 将告诉它不要破坏此声明中的 C 函数名称。
0赞 Steph 2/24/2014
嗨,@Mattias。我也在尝试在 opencv 和 c++ 中实现 flandmark 检测器。我尝试按照此处提到的步骤进行操作,但是出现构建错误,并在输出屏幕上写入:致命错误C1083:无法打开包含文件:“cv.h”:没有这样的文件或目录。你能指导我吗?

答:

2赞 Juniar 7/19/2013 #1

编译器正在寻找 flandmart_init(char const *)。您需要包含定义此函数的头文件。如果已经包含其头文件,则编译器无法找到定义函数 flandmart_init() 的位置。现在,如果您有flandmark_detector.cpp并flandmark_model.cpp,因为这看起来像是第三方代码。包括它们的头文件,然后包含在您的项目flandmark_model.cpp和flandmark_model.cpp中,无论定义函数 flandmart_init(char const *) 哪个。确保它编译。将它们与 .cpp 文件一起添加。您可以右键单击项目上的源文件,然后单击;添加现有项>。

评论

0赞 Easyrider 7/19/2013
谢谢!我忘了在项目中添加文件。我只将文件复制到项目文件夹。谢谢谢谢!你是我的救主!