opencv库加载(C ++)

时间:2013-06-12 08:58:09

标签: c++ opencv dll

运行opencv项目时,某些dll需要位于exe路径或计算机路径中。

  1. 加载dll的时间(静态时间?)
  2. 在opencv源代码中加载了哪些dll?在opencv源代码中搜索“loadLibrary”给出了零结果......
  3. 编辑: 在创建opencv项目时,我在链接器属性中添加了.lib文件。执行时,exe搜索相应的dll文件。我的问题是opencv源代码(我猜是.lib文件的源代码)是加载dll文件的行。

    由于

2 个答案:

答案 0 :(得分:3)

  

1.加载dll的时间(静态时间?)

'dll'中的'd'代表'动态'。所以这意味着在运行时加载了一个dll,绝对不是在'静态时间'。

  

2.在opencv源代码中加载了dll?在opencv源代码中搜索“loadLibrary”会得到零结果......

那将是动态链接器/加载器。现在我在很长一段时间内都没有为Windows编写任何东西,所以我不确定dll是否被懒惰加载。在任何情况下,当您构建项目(.exe或.dll,无关紧要)时,编译器将嵌入一个类似于“哦顺便说一下,我需要在您的最终.exe中使用opencv.dll”的通知或的.dll。

因此,当你运行你的.exe(或你的.dll被另一个程序加载)时,加载器会看到这个通知,并在某处找到一个opencv.dll(即在当前目录或PATH中列出的任何目录中)环境变量)。

这一切都是在没有你或任何人打电话给loadLibrary之类的情况下完成的。因为你明确地告诉你的编译器你的程序依赖opencv.dll,并且因为编译器对开发人员很好,所以它会产生必要的代码(就像你的.exe或.dll中的“机器代码”一样) )为你加载库。

loadLibrary主要用于你不希望你的程序明确依赖于给定的dll(即如果dll不可访问你仍然希望你的程序工作),但是你想要加载它作为一个模块,如果它可用。考虑一下将功能扩展到核心程序的插件。

答案 1 :(得分:0)

OpenCV的dll文件会在执行时立即加载。您可以通过一个只执行System("PAUSE");

的简单程序来轻松测试

如果不存在所需的opencv dll文件,即使是简单的程序也无法运行。

与静态链接的区别在于,如果静态链接,库将插入可执行文件中,您无需使用软件分发任何opencv库文件。