-2

我想使用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)
​​错误 2 error 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

4

2 回答 2

2

OpenCv 使用 ffmpeg - 这是一个非常大的项目。ffmpeg 在幕后使用了其他一些工具。您可能想使用 ffmpeg,但从 ffmpeg 本身获取源代码是愚蠢的 - 您将花费数年时间摆弄该代码 - 真的。

所以,决定一个视频输入库——无论是 OpenCV、ffmpeg、Direct3D 还是其他什么,并使用它。

不要坚持“你不能使用外部库”的想法,因为你不能没有它们。开发这样一个库需要数年时间——我很确定你不想那样做。

于 2013-02-07T07:57:06.383 回答
1

好吧,看来您对 Kernel32.dll 中的 LoadLibrary()/GetProcAddress() 函数的调用未解决。您使用的是什么 IDE/项目类型?除非在某处指定 /NODEFAULTLIB,否则默认情况下应链接 Kernel32.lib,至少据我所知。您可以尝试将代码添加#pragma comment(lib, "kernel32.lib")到复制代码的文件中,但如果没有有关您的设置的更多信息,很难回答是什么原因造成的。

于 2013-02-07T12:41:06.260 回答