首页 文章

C在不同目录中链接第三方dll

提问于
浏览
0

我有一个自己的DLL使用第三方DLL,通过其lib文件包含 . 如果第三方dll在工作目录中,编译工作正常并且运行时也可以工作 .

但是现在我想将第三方dll移动到另一个文件夹然后我的dll无法加载,因为第三方dll无法加载,因为它无法找到 .

哪里(VS2010)或如何定义在运行期间应该使用的第三方DLL的文件夹?

2 回答

  • 1

    首先,我们应该区分两种情况:

    1)Load-Time Dynamic Linking - 当您将代码链接到存根库以在链接时解析对DLL函数的引用,然后系统尝试在程序启动时加载DLL(如果找不到DLL则终止程序) )你基本上没有控制权 . 从您所说的内容来看,您正在使用此选项 .

    2)Run-Time Dynamic Linking - 当您自己加载DLL时 LoadLibrary / LoadLibraryEx 并在运行时解析所需的符号 . 在这里,你可以更好地控制正在发生的事情(在其他方面你可以指定什么以及从哪里加载) . 如果您需要自定义布局,可能切换到此机制是有意义的吗?

    那么两个场景的工作需要发生什么:

    1)系统基本上在一组预定义的搜索路径中搜索您要加载的DLL以及它可能依赖的任何DLL . 所以,正如m.s.所提到的那样 . 您可以将包含DLL的路径追加到 PATH 变量,然后系统将能够找到它 . 但这只是系统查找DLL的地方之一.Here是完整的描述 . 简而言之,搜索顺序中最重要的地方是:

    • 加载应用程序的目录 .

    • 系统目录 .

    • Windows目录 .

    • 当前目录 .

    • PATH环境变量中列出的目录 .

    所以这解释了为什么添加到 PATH 工作并且也被认为是一种常规方法,因为使用当前目录(你可以做)调整可以做坏事 .

    2)在这种情况下,你是独立的 . 通过使用SetDefaultDllDirectoriesLOAD_WITH_ALTERED_SEARCH_PATH 加载DLL和任何依赖项,LoadLibraryEx可以更改搜索路径 .

  • 1

    将包含DLL的文件夹添加到 PATH 环境变量中 .

相关问题