浅析Linux执行可执行文件提示No such file or directory的解决方法

一、问题记录

  最近在 linux 使用nodejs时,遇到个问题,就是 node 都安装成功了,但是进入 bin 目录,执行 ./node -v 总是报错,bash: ./node: No such file or directory,查资料解决方案如下:

1、最近在使用Linux操作系统执行一个可执行文件,结果出现了No such file or directory的提示,表示很疑惑

./tshrf
bash: ./tshref: No such file or directory

2、查看文件信息,可以看到文件是存在的,并且是可以执行的。

-rwxr-xr-x 1 yuan yuan 20581 9  2004 tshref

3、查阅资料后,原因是系统位数与该可执行文件需要的lib库位数不匹配。

4、用uname命令打印系统信息,发现系统是64位系统

uname -a
Linux yuan-vm 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

5、用file命令查看文件信息,发现是一个32位可执行文件

file ./tshref
./tshref: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 2.2.5, not stripped

  可以看到操作系统是 64 位,但是可执行文件是 32 位。

  所以有 2 种方式解决:

一、下载对应 64位 的安装包

二、要想在64位系统上与运行32位程序,则需要安装32位lib库。

sudo apt-get install ia32-libs
 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package ia32-libs is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
  lib32z1 lib32ncurses5 lib32bz2-1.0

  过程中有可能找不到需要的库,但是会有几个替代包,选择安装其中一个。

sudo apt-get install lib32bz2-1.0
 
lib32bz2-1.0

  然后就可以正常运行之前的可执行文件了。

二、小结思考

  我这里最初看操作系统是 x86_64 的,其实知道是 64位,所以特地去 nodejs 下载处专门选 64 位的安装包,但是因为要固定版本,所以进入对应版本页,然后看到 x86.tar.xz 的版本,以为都有 x86_64、就是匹配 x86。

  其实不是的,x86_64 是 64 位、而 x86 是 32位的,x64 是 64位的,所以应该选 x64.tar.xz 的 node 版本。

  具体可看我的这篇博客:https://www.cnblogs.com/goloving/p/14803846.html

posted @ 2018-03-21 23:33  古兰精  阅读(1192)  评论(0编辑  收藏  举报