无法定位程序输入点 ftol2与动态链接库msvcrt.dll上

原问题:无法定位程序输入点 ftol2与动态链接库msvcrt.dll上
分类:编程开发 > 最后更新时间:【2017-07-03 08:28:05】

最佳答案

我试了一下,在Win7上运行则没有这个错误。只是程序运行出错,代码编译是没有问题的。初步分析了一下,大致明白了问题了根源。问题的根源在于程序的exe或者其底层库链接了一个错误的msvcrt.dll。其实微软提供的VC运行时库是有很多版本的。为什么需要这么多的运行时库?原因很多,主要有下面两个:一是为了不同的处理器厂商和硬件架构,比如amd和intel,比如x86和x64等等;二是为了适配不同VS版本,比如VS2003、VS2005、VS2008等等,即使同是VS2008,VS2008和VS2008+sp1的运行时库都是不一样的。因此msvcrt.dll在xp系统和win7系统都是不一样的,具体到这个错误是_ftol2函数在xp系统和win7系统所处的函数地址是不一样的。

要解决这个错误就必须找到到底哪个底层库链接了错误的msvcrt.dll。这次我采用的一个笨办法是使用depends打开exe程序,然后一个个地查找其依赖库,最后找到一个opengl32.dll

opengl32.dll所依赖的msvcrt.dll呈现红色警告,可以看出opengl32.dll所链接的msvcrt.dll并不对。后来我检查了一下,exe所在目录下有opengl32.dll,把它删掉后程序所用的应该是操作系统目录下的opengl32.dll,这样程序能顺利启动了。

单纯靠depends打开exe程序分析它的依赖库是否存在错误链接的问题这种做法效率无疑有点低,特点是当一个程序的依赖库特别多的时候。我想到的一个可以提高效率的做法是写一个程序通过获取exe的依赖库表,然后逐个进行动态加载(即调用LoadLibrary函数),一旦加载时出现无法定位程序输入点的错误,即可判断该库存在链接的错误。

最佳答案由网友  天上流云_2017  提供
公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
19

分享到:

其他回答

其它网友回答:
  1、Ctrl+Shift+Esc--文件--Ctrl+鼠标单击“新(建)任务”;黑窗中键入 chkdsk  /f  %systemdrive% 回车,如提示该卷正被使用、重启检查?选择“y”,检查将在重启电脑后进行。

其它网友回答:
  2、打开360人工服务,输入“msvcrt.dll”查找方案修复。

其它网友回答:
这是系统与软件不兼容造成的

其它网友回答:
msvcrt.dll在xp系统和win7系统都是不一样的,具体到这个错误是_ftol2函数在xp系统和win7系统所处的函数地址是不一样的。把它删掉后程序所用的应该是操作系统目录下的opengl32.dll,这样程序能顺利启动了。