Я хочу использовать исходный код CvCaptureFromFile(..)
Я не хочу использовать библиотечные функции OpenCV в моем проекте. Поэтому я вошел в функцию, нажав F10, F11, и скопировал нужные мне вещи и преобразовал их в C-код. До сих пор все было хорошо.
Но когда я пытался запустить, я получаю ошибку связывания внутри функции icvIntFFMPEG(void)
ошибки заключаются в следующем:
Ошибка 1
error LNK2019: unresolved external symbol
"__declspec(dllimport) void * __stdcall GetProcAddress(struct
HINSTANCE__ *,char const *)"(__imp_?GetProcAddress@@YGPAXPAUHINSTANCE__@@PBD@Z) referenced in
function "void __cdecl icvInitFFMPEG(void)" (?icvInitFFMPEG@@YAXXZ)
Ошибка 2error LNK2019: unresolved external symbol "struct HINSTANCE__
* __stdcall LoadLibrary(char const *)" (?LoadLibrary@@YGPAUHINSTANCE__@@PBD@Z) referenced in function "void
__cdecl icvInitFFMPEG(void)" (?icvInitFFMPEG@@YAXXZ)
Я скопировал все как есть в исходном коде. Есть идеи, где я иду не так? Как мне решить эту ошибку?
ОБНОВИТЬ: ЕСЛИ я обертываю файл заголовка (где я копировал исходный код) внутри внешнего «C», что-то вроде этого
extern "C" {
#include "defination.h"}
Тогда первая ошибка исчезнет, и ошибка с loadLibrary изменится на
error LNK2019: unresolved external symbol __imp__LoadLibrary@4 referenced in function _icvInitFFMPEG
OpenCv использует ffmpeg — это действительно большой проект. А ffmpeg использует некоторые другие инструменты за шторами. Возможно, вы захотите использовать ffmpeg, но брать исходный код из самого ffmpeg глупо — вы потратите годы, возясь с этим кодом — действительно.
Итак, выберите библиотеку видеовходов — будь то OpenCV, ffmpeg, Direct3D или что-то еще, и используйте ее.
Не держитесь за идею, что «вы не можете использовать внешние библиотеки», потому что вы не можете обойтись без них. На создание такой библиотеки уходят годы — я уверен, что вы не хотите идти по этому пути.
Что ж, похоже, ваши неразрешенные вызовы функций LoadLibrary () / GetProcAddress () находятся внутри Kernel32.dll. Какой IDE / тип проекта вы используете? Kernel32.lib должен быть связан по умолчанию, если только / NODEFAULTLIB не указан где-то, по крайней мере, насколько я помню. Вы можете попробовать добавить #pragma comment(lib, "kernel32.lib")
в файл, в который вы скопировали код, но без дополнительной информации о вашей настройке трудно ответить, что является причиной этого.