由于包实在太多,选择安装其实是一件前期的事情。总算安装了一个大概5G的系统,可是perl却不能用,显示的就是某个动态链接库没有办法加载?但是却又不知道是哪个。在网上找了一堆,最近嘛,这网也破,用baidu搜不到有价值的东西,用google吧,你不一定能够打开页面,打开了也不一定能够搜,搜到了,又不一定能够打开。不过,耐心问题得到回报,在网上看了一个好命令,叫做cygcheck,就是用来检查某个可执行文件依赖于哪些库,这些库在路径在哪里或者不存在。下面是正常的情况:
- #cygcheck /usr/bin/perl
- D:\cygwin\bin\perl.exe
- D:\cygwin\bin\cygperl5_10.dll
- D:\cygwin\bin\cygcrypt-0.dll
- D:\cygwin\bin\cygwin1.dll
- C:\WINDOWS\system32\KERNEL32.dll
- C:\WINDOWS\system32\ntdll.dll
- D:\cygwin\bin\cyggcc_s-1.dll
- D:\cygwin\bin\cygssp-0.dll
是不是一目了然啊。如果缺少了某个文件,则显示如下:
- #cygcheck /usr/bin/perl
- D:\cygwin\bin\perl.exe
- D:\cygwin\bin\cygperl5_10.dll
- cygcheck: track_down: could not find cygcrypt-0.dll
- D:\cygwin\bin\cygwin1.dll
- C:\WINDOWS\system32\KERNEL32.dll
- C:\WINDOWS\system32\ntdll.dll
- D:\cygwin\bin\cyggcc_s-1.dll
- D:\cygwin\bin\cygssp-0.dll
那么就显示缺少了cygcrypt-0.dll。不过,现在还不知道是否有工具能够知道哪个dll在哪个包里面。我安装系统的时候,找了半天也没有找到cygcrypt-0.dll在哪里,最后在老版本的的cygwin里面拷贝过来一个,居然也能够用了。cygcheck也可心带上参数,来寻找包的,如
- cygcheck -p 'cygcrypt\-0\.dll'
需要使用转义,但是由于还不知道如何让cygcheck通过代理服务器,所以这个功用还没有做实验。[号外:补充一下,可以直接在 查找,在上面找了一下,对就cygcrypt-0.dll的包应该是,上次我上载的包中,就没有这个,重新下载了这个包,应该算是搞定了。]
与cygcheck功能类似的是标准的ldd命令,但在cygwin的世界里,如果缺少了dll之后,使用ldd有很多时候,不能按照想象中的工作。也许ldd一定要能够加载进程才行吧?