运行opencv项目时,需要一些dll要么在exe路径下,要么在电脑路径下。
- 在什么时间加载 dll(静态时间?)
- dll在opencv源代码中的哪里加载?在 opencv 源中搜索“loadLibrary”的结果为零...
编辑:创建 opencv 项目时,我在链接器属性中添加 .lib 文件。执行时,exe会搜索相应的dll文件。我的问题是在 opencv 源代码中(我猜是 .lib 文件的源代码)是加载 dll 文件的行。
谢谢
奥哈德
1.什么时候加载dll(静态时间?)
“dll”中的“d”代表“动态”。所以这意味着 dll 在运行时加载,绝对不是在“静态时间”。
2.在opencv源代码的哪里加载dll?在 opencv 源中搜索“loadLibrary”的结果为零...
那将是动态链接器/加载器。现在我已经很长时间没有为 Windows 编写任何东西了,所以我不确定 dll 是否被延迟加载。无论如何,当您构建项目(.exe 或 .dll,没关系)时,编译器会在您的最终 .exe 或.dll。
因此,当您运行 .exe 时(或当您的 .dll 被另一个程序加载时),加载程序将看到此通知并在某处(即在当前目录或 PATH 环境变量中列出的任何目录中)寻找 opencv.dll .
无需您或任何人调用类似loadLibrary
. 因为你已经明确告诉你的编译器你的程序依赖于 opencv.dll,并且因为编译器往往对开发人员很好,所以它会生成必要的代码(如“机器代码”,在你的 .exe 或 .dll ) 为您加载库。
loadLibrary
主要用于当您不希望您的程序显式依赖给定的 dll 时使用(即,如果 dll 不可访问,您仍然希望您的程序工作),但如果它可用,您希望将其作为模块加载. 考虑将功能扩展到您的核心程序的插件。
OpenCV 的 dll 文件在执行时立即加载。你可以很容易地通过一个简单的程序来测试它System("PAUSE");
如果所需的 opencv dll 文件不存在,即使是简单的程序也不会运行。
与静态链接的区别在于,如果您静态链接,该库将被插入到您的可执行文件中,您不需要随软件分发任何 opencv 库文件。