分析cygwin下报“无法定位程序输入点”的错误

现象:
 
       之前网上下了一个cygwin的本地安装版本,装了一些常用的命令行工具集。结果执行最为常用的ls命令时总是报如下的错误:“无法定位程序输入点 strtoumax 于动态链接库 cygwin1.dll 上”。地球人都知道,unix下不能使用ls命令,尘世间最痛苦的事莫过于此啦~
 
原因:
 
       在网上搜了一下,看到关于cygwin的介绍:
 
       “cygwin的工作机制:cygnus当初首先把gcc,gdb,gas等开发工具 进行了改进,使他们能够生成并解释win32的目标文件。然后,他们要把 这些工具移植到windows平台上去。一种方案是基于win32 api对这些工 具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取 了一种不同的方法——他们写了一个共享库(就是cygwin dll),把win32  api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于 win32 api写了一个unix系统库 的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起, 就可以使用unix主机上的交*编译器来生成可以在 windows平台上运行的 工具集。以这些移植到windows平台上的开发工具为基础,cygnus又逐步 把其他的工具(几乎不需要对源代码进行修改,只需要修改他们的配置 脚本)软件移植到windows上来。这样,在windows平台上运行bash和开 发工具、用户工具,感觉好像在unix上工作。”
 
       从上面的文字了解到,前面报错的动态链接库cygwin1.dll实质就是一个操作系统的接口适配层,所报的错误应该是在该库中没有找到被ls命令调用的接口函数strtoumax。因此,造成该错误的原因极有可能是该动态库版本与所用的ls命令不匹配。
 
解决:
 

    分析出原因,解决的方法就再简单不过啦。从网上下载新的cygwin1.dll。和本地安装的比较一下文件版本号:原来的版本号是1005.15.0.0,新下载的版本号是1005.18.0.0。再用Dependency Walker看一下新下载的dll导出的接口,果然有strtoumax。使用新dll替换原来bin目录下的dll,问题就解决啦^_^


原文地址:http://blog.sina.com.cn/s/blog_4c31626a010008rn.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值