更改DLL依赖项

更改DLL依赖项,dll,windows-10,visual-studio-2019,Dll,Windows 10,Visual Studio 2019,我正试图在Visual Studio 2019上为libpqxx编译一个测试程序,不幸的是,在与Dependency Walker进行检查后,我需要的一些DLL依赖于64位版本,依赖路径指向System32文件夹,而不是SysWOW64中的同名文件。现在我不知道如何更改DLL的路径,以便让程序运行。有没有办法更改我需要的DLL的依赖路径 提前谢谢 编辑: 当我尝试运行该程序时,会收到错误消息“libssl-1_1.dll”和“libcrypto-1_1.dll”丢失。当我将它们添加到项目文件夹中

我正试图在Visual Studio 2019上为libpqxx编译一个测试程序,不幸的是,在与Dependency Walker进行检查后,我需要的一些DLL依赖于64位版本,依赖路径指向System32文件夹,而不是SysWOW64中的同名文件。现在我不知道如何更改DLL的路径,以便让程序运行。有没有办法更改我需要的DLL的依赖路径

提前谢谢

编辑:

当我尝试运行该程序时,会收到错误消息“libssl-1_1.dll”和“libcrypto-1_1.dll”丢失。当我将它们添加到项目文件夹中时,项目将生成,程序将立即停止,并显示消息“应用程序无法正确启动0xc00007b”。假设问题来自依赖的x64 DLL,我检查了VisualStudio与Dependency Walker一起使用的DLL,发现有许多依赖的DLL是x64,位于System32文件夹中

ntdl.dll - fine
kernel32.dll -
    c:\windows\system32\KERNELBASE.DLL
    c:\windows\system32\NTDLL.DLL
    c:\windows\system32\BCRYPTPRIMITIVES.DLL
    c:\windows\system32\NSI.DLL
    c:\windows\system32\RPCRT4.DLL
    c:\windows\system32\WS2_32.DLL

KernelBase.dll-
    c:\windows\system32\NTDLL.DLL

ws2_32.dll-
    c:\windows\system32\KERNELBASE.DLL
    c:\windows\system32\NTDLL.DLL
    c:\windows\system32\RPCRT4.DLL
    c:\windows\system32\BCRYPTPRIMITIVES.DLL
    c:\windows\system32\NSI.DLL
    c:\windows\system32\WS2_32.DLL

rpcrt4.dll-
    c:\windows\system32\KERNELBASE.DLL
    c:\windows\system32\NTDLL.DLL
    c:\windows\system32\RPCRT4.DLL
    c:\windows\system32\BCRYPTPRIMITIVES.DLL
    c:\windows\system32\NSI.DLL
    c:\windows\system32\WS2_32.DLL

msvcp140d.dll-
    c:\windows\system32\KERNELBASE.DLL
    c:\windows\system32\NTDLL.DLL
    c:\windows\system32\RPCRT4.DLL
    c:\windows\system32\BCRYPTPRIMITIVES.DLL
    c:\windows\system32\NSI.DLL
    c:\windows\system32\WS2_32.DLL

vcruntime140d.dll-
    c:\windows\system32\KERNELBASE.DLL
    c:\windows\system32\NTDLL.DLL
    c:\windows\system32\RPCRT4.DLL
    c:\windows\system32\BCRYPTPRIMITIVES.DLL
    c:\windows\system32\NSI.DLL
    c:\windows\system32\WS2_32.DLL

ucrtbased.dll- fine
这些是DLL和64位的依赖项。我说的对吗?是什么导致了问题?我是否需要将依赖项更改为32位

Dump of file C:\...\libpq.dll

PE signature found

File Type: DLL

FILE HEADER VALUES
             14C machine (x86)

Dump of file C:\...\lib\libpq.lib

File Type: LIBRARY

FILE HEADER VALUES
             14C machine (x86)

Dump of file C:\...\lib\pqxx.lib

File Type: LIBRARY

FILE HEADER VALUES
             14C machine (x86)
来自dumpbin的依赖项/依赖项

kernel32.dll-
    ntdll.dll
    KERNELBASE.dll
    bunch of api-ms-win-core
    ext-ms-win-oobe-query-l1-1-0.dll
    RPCRT4.dll

KernelBase.dll-
    bunch of ext-ms-win
    ntdll.dll
    api-ms-win-eventing-provider-l1-1-0.dll

ws2_32.dll-
    bunch of api-ms-win-core
    ntdll.dll
    RPCRT4.dll

rpcrt4.dll-
    ntdll.dll
    KERNELBASE.dll
    bunch of api.ms.win

msvcp140d.dll-
    CONCRT140D.dll
    VCRUNTIME140D.dll
    ucrtbased.dll
    KERNEL32.dll

vcruntime140d.dll-
    ucrtbased.dll
    KERNEL32.dll

ucrtbased.dll-
    bunch of api-ms-win-core

您可以将DLL的路径添加到“工具”>“选项”>“项目和解决方案”>“VC++目录”下的“可执行文件”设置中(但仅用于构建、执行或调试)

可以将它们添加到全局路径环境变量中 您可以使用我在这里描述的批处理文件启动VisualStudio,并操纵其中的路径
您可以将DLL复制到可执行文件的目录中。

System32是64位DLL所在的目录,SysWOW64是32位DLL所在的目录。不管问题是什么,都不是因为Windows错误地加载了错误的DLL位,因为这不会也不可能发生。检查您的生成设置和链接所针对的库的一致性。是的,但我需要Visual Studio的32位DLL。但问题是“我需要的某些DLL依赖于64位版本”。无论如何,您需要的DLL的比特数取决于您的构建,并且无法猜测构建是否存在问题,因为您没有提供上下文或详细信息。哦,我明白了,措辞有点糟糕。我检查了VisualStudio与Dependency Walker一起使用的DLL文件,发现有些DLL依赖于system32文件夹中的其他64位DLL,而不是使用sysWOW64文件夹中的DLL。因此,我的想法是,这导致了“应用程序无法正确启动0xc00007b”错误,我需要找到一种方法,让他们从sysWOW64中找到DLL。好吧,我真的不想放弃,但这似乎是行不通的。我想我会使用另一个数据库工具。非常感谢你的帮助,真的从中学到了很多。我祝你一切顺利。我遇到的问题是,并非所有Visual Studio包含的依赖DLL都是32位的,正如我在与dependency walker的检查中看到的那样。这导致出现错误“应用程序无法正确启动0xc00007b”。我已经添加了DLL路径作为环境变量,但是单个DLL似乎依赖于其他DLL,我唯一的想法是以某种方式将它们的依赖关系更改为32位。VisualStudio包含的DLL本身是32位的,很多依赖DLL是64位的。