我想使用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 :如果我将头文件(我在处理源代码的地方)包装在extern“C”中,就像这样 -
extern "C" {
#include "defination.h"
}
然后第一个错误消失了,loadLibrary的错误变为
error LNK2019: unresolved external symbol __imp__LoadLibrary@4 referenced in function _icvInitFFMPEG
答案 0 :(得分:2)
OpenCv使用ffmpeg - 这是一个非常大的项目。 ffmpeg使用窗帘后面的一些其他工具。你可能想要使用ffmpeg,但从ffmpeg本身获取源代码是愚蠢的 - 你将花费数年时间摆弄代码 - 真的。
所以,决定一个视频输入库 - 无论是OpenCV,ffmpeg,Direct3D还是其他什么,并使用它。
不要抱怨“你不能使用外部库”的想法,因为你不能没有它们。开发这样一个库需要数年时间 - 我很确定你不想这样做。
答案 1 :(得分:1)
好吧,似乎你得到了对Kernel32.dll内部的LoadLibrary()/ GetProcAddress()函数的未解析调用。您使用的IDE /项目类型是什么?默认情况下应该链接Kernel32.lib,除非在某处指定了/ NODEFAULTLIB,至少就我记忆所知。您可以尝试将#pragma comment(lib, "kernel32.lib")
添加到您复制代码的文件中,但如果没有关于您的设置的更多信息,则很难回答导致此问题的原因。