我想使用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)
我复制了源代码中的所有内容。知道我哪里错了吗?如何解决此错误?
UPDATE:如果我将头文件(我处理源代码的地方)包装在一个外部"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还是其他什么,并使用它
不要执着于"你不能使用外部库"的想法,因为你离不开它们。开发这样一个图书馆需要数年时间——我敢肯定你不想走那种路。
好吧,你似乎对Kernel32.dll中的LoadLibrary()/GetProcAddress()函数进行了未解析的调用。你使用的是什么IDE/项目类型?Kernel32.lib默认情况下应该链接,除非在某个地方指定了/NODEFAULTLIB,至少在我记忆中是这样。你可以尝试将#pragma comment(lib, "kernel32.lib")
添加到你复制代码的文件中,但如果没有更多关于你的设置的信息,很难回答是什么导致了这种情况。