Не удается заставить Flandmarks работать, C++, ошибка LNK2019, неразрешенный внешний символ

Я хочу протестировать 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

Менеджер свойств-> 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 Solution ->

  • Перешел с win32 на "новый", где перешел с Itanium на x64. Скопируйте настройки из "win32"

Из zip-файла, который вы можете скачать на домашней странице flandmarks, я копирую файлы в папку «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 ==========

Спасибо за прочтение!


person Easyrider    schedule 18.07.2013    source источник
comment
Попробуйте окружить #include файла заголовка flandmark с помощью «extern C { }», а затем выполните новую сборку.   -  person Peter L.    schedule 19.07.2013
comment
Я попробовал решение user2585483s, и оно сработало, но мне любопытно, что делает «extern C {}»? Если у вас есть время, пожалуйста, объясните. Спасибо, что нашли время, чтобы помочь мне!   -  person Easyrider    schedule 19.07.2013
comment
Хорошие новости, что это сработало, используя предложение в ответе. Я думал, что это может быть связано с «extern C {}», потому что это выглядело как проблема с искажением имени. При смешивании кода C и C++ компилятор искажает имена функций C. 'extern C {}' сообщит ему не изменять имена функций C в этом объявлении.   -  person Peter L.    schedule 19.07.2013
comment
Привет @Mattias. Я также пытаюсь реализовать детектор фландрии в opencv и С++. Я попытался выполнить шаги, упомянутые здесь, но я получаю сообщение об ошибке сборки, а на экране вывода написано: фатальная ошибка C1083: невозможно открыть включаемый файл: «cv.h»: нет такого файла или каталога. Не могли бы вы направить меня, пожалуйста?   -  person Steph    schedule 24.02.2014


Ответы (1)


Компилятор ищет flandmart_init(char const *). Вам нужно включить заголовочный файл, в котором определена эта функция. Если вы уже подключили его заголовочный файл, то компилятор не сможет найти, где была определена функция flandmart_init(). Теперь, если у вас есть flandmark_detector.cpp и flandmark_model.cpp, это выглядит как сторонний код. Включите оба их заголовочных файла, а затем включите в свой проект flandmark_model.cpp и flandmark_model.cpp, в зависимости от того, что определяет функцию flandmart_init(char const *). Убедитесь, что он компилируется. Добавьте их вместе с вашими файлами .cpp. Вы можете щелкнуть правой кнопкой мыши исходные файлы в своем проекте, затем щелкнуть; Добавить->Существующий элемент.

person Juniar    schedule 19.07.2013
comment
Большое спасибо! Я забыл добавить файлы в проект. Я только скопировал файлы в папку проекта. Спасибо Спасибо! Ты мой спаситель! - person Easyrider; 19.07.2013