使用 MSYS 复制 System32 DLL 会破坏库的 64 位存在

Posted

技术标签:

【中文标题】使用 MSYS 复制 System32 DLL 会破坏库的 64 位存在【英文标题】:Copying System32 DLL using MSYS breaks the 64bit being of the library 【发布时间】:2013-11-25 09:18:52 【问题描述】:

在 Windows 7 64 位下,来自 System32 的 *32.dll 是 64 位库(根据 Dependency Walker - depends.exe x64)。我注意到一个奇怪的问题是,在 MSYS Shell 中做 - 例如 - cp /c/System32/ws2_32.dll /c/mingw64/some/lib/libws2_32.dll 正在破坏/将 DLL 转换为 32 位文件(仍然根据 Dependency Walker)......通过 Windows 资源管理器复制/重命名它时保持它不变。 ..还是很奇怪。如果有人有解释...

还是我错过了一些关于cp 命令用法的内容...

注意:我已经尝试过--preserve=all--symbolic-link 等选项。

谢谢。

【问题讨论】:

【参考方案1】:

cp 以某种方式(直接或由于您运行它的父进程)作为 32 位进程运行。 File System redirection 正在启动,您实际上是从 C:\Windows\SysWOW64 目录复制 ws2_32.dll - 它已经作为 32 位 DLL 存在。

32 位应用程序可以通过将 %windir%\Sysnative 替换为 %windir%\System32 来访问本机系统目录。 WOW64 将 Sysnative 识别为特殊别名,用于指示文件系统不应重定向访问。

【讨论】:

好的,很好。 cp $WINDIR"/Sysnative/ws2_32.dll" /d/some/dir/libws2_32.dll 为我工作(MSYS 是一个 32 位应用程序。)。谢谢你。

以上是关于使用 MSYS 复制 System32 DLL 会破坏库的 64 位存在的主要内容,如果未能解决你的问题,请参考以下文章

怎么将dll的文件复制替换到C:\windows\system32 win7

受病毒感染的system32\dmserver.dll被删除后如何替换?

libcurl.dll 怎么用

电脑开机显示“windows root\system32\hal.dll 丢失或损坏”怎么解决?

如何解决vs2015运行缺少ucrtbased.dll的问题

丢失libbz2-1.dll