更改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文件夹中更改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”丢失。当我将它们添加到项目文件夹中
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位的。