我编写了一个C程序,在Windows 7和Linux上运行良好,但是当我在Windows XP上执行它时出现错误:
"_except_handler4_common could not be located in the dynamic link library msvcrt.dll"
我研究了它,有些人说要删除我没有的DLL“dwmapi.dll”,所以这不是我的问题。
有人告诉我使用depends walker(depends.exe)
查找谁正在使用msvcrt.dll
。我做了,发现pcre
库正在使用它,实际上它有问题,但我不知道如何解决这个问题。任何人都可以帮助我吗?
以下是步行者给我看的图片:
答案 0 :(得分:3)
理由可能性(afaiu):
a)在构建时你特意链接到了msvcrt.dll - 这应该是 根据Microsoft支持不会发生,除非具体做到 它
b)XP上的其他一些已安装或复制的程序/驱动程序 正在触发msvcrl.dll“错误”版本的链接。
取决于原因, 这里有一些想法要解决:
1)可能有一些程序/驱动程序/等。在XP上安装 已经推出“Vista / Win7相关垃圾”的机器。它是 (由互联网说)PCRE3.DLL属于“GnuWin32非系统” 进程“。这意味着您可以尝试找到它并重命名/删除它。或者 删除使用它的程序。
2)安装可以重新分发你的C ++的redist for XP 用于在Win7上构建可能有所帮助。这是VS2005的链接:( darn .. 使用谷歌 - 我每个帖子只能提供两个链接:P)
重建:
3)使用一些来自XP机器上的源代码构建文件 您可以使用VisualStudio版本。并检查那些VS项目 属性!
4)修复Windows7上的构建。你可能正在链接到 Windows 7版本中msvcrt.dll中的_except_handler4_common。确保你不这样做。您可以专门指示链接器 不要在VisualStudio项目属性中链接到它 “/NODEFAULTLIB:msvcrt80.lib”。你也没有说明你是什么 用于建筑。 VS2005,VS2008,VS2010,gcc?
基于有根据的猜测和Jeffrey Tan research here答案:
答案 1 :(得分:0)
(代表OP)
问题在于pcre3.dll,正如我之前所说,我只是更改了它的版本,我使用的是7.x版并更改为4.4调用pcre.dll而不是pcre3.dll ,如果任何人有同样的问题,解决我的问题。
这是指向正确的lib的链接: pcre-4.4-dll.zip