SQLite 二进制文件在我的 Ubuntu 上不起作用,

SQLite 二进制文件在我的 Ubuntu 上不起作用,

我是 sqlite 的新手,我刚刚使用获得了 sqlite 的二进制文件wget http://www.sqlite.org/sqlite-shell-linux-x86-3071300.zip,然后从 zip 文件中提取 sqlite3,但它不起作用,这让我抓狂了,请帮忙。

我的操作系统是Ubuntu 12.04 64位,执行sqlite的步骤如下,

u1@newhost:/tmp$ ls -hl sqli*
-rwxrwxr-x 1 u1 u1 568K Jun 11 17:35 sqlite3
-rw-rw-r-- 1 u1 u1 310K Jun 12 02:53 sqlite-shell-linux-x86-3071300.zip
u1@newhost:/tmp$ file sqlite3
sqlite3: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x8637c6613a485b675a05f155564cc0eda4b2d3cc, stripped
u1@newhost:/tmp$ ./sqlite3 mydb.db
-bash: ./sqlite3: No such file or directory
u1@newhost:/tmp$

出于安全原因,我从 $PATH 中删除了 .,所以我只使用./sqlite3来启动

更新如下

此方法适用于 Fedora 15 32 位

[root@newhostfedora15 ~]# ./sqlite3 test.db
SQLite version 3.7.13 2012-06-11 02:05:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .e

这也适用于 CentOS 5.6 64 位

但在我的 Ubuntu 12.04 64 位上也无法使用 root 权限,

root@newhost:~# unzip sqlite-shell-linux-x86-3071300.zip
Archive:  sqlite-shell-linux-x86-3071300.zip
  inflating: sqlite3
root@newhost:~# ./sqlite3 f
-bash: ./sqlite3: No such file or directory
root@newhost:~# ldd ./sqlite3
        not a dynamic executable

我遇到了这个问题,它在 Ubuntu 12.04 32 位、CenetOS 5.6 64 位上可以运行,但在 Ubuntu 12.04 64 位、Fedora 17 64 位上不能运行,sqlite 的 32 位二进制文​​件已经足够好了,尽管它并不适用于每个平台。我会记住,最好从源代码编译我自己的 64 位二进制文​​件,或者如果 sqlite 64 位二进制文​​件通过官方网站提供,那就太棒了 :P

答案1

对于 Ubuntu(以及许多其他 Linux 发行版),安装软件的首选方法是使用包管理基础结构。Ubuntu 上的一个包管理工具是apt-get

例如,安装sqlite3

sudo apt-get update
sudo apt-get install sqlite3

这将下载 Ubuntu 官方版本的 sqlite,并将其安装到您的系统上。这样,您就不必自己下载,也不必调试不兼容的二进制版本的问题。

[第一个命令sudo apt-get update仅下载最新的可用软件包列表。您不需要每次安装软件包时都执行此操作]

然后,您只需运行 sqlite3:

sqlite3

如果你真的想要运行未打包的 sqlite 二进制文件,您需要确保您的机器拥有所有必要的位。存档中的 sqlite 二进制文件是 32 位动态链接可执行文件(如您通过运行所见file),因此我们至少需要一个 32 位动态链接器以及任何必要的库。

对于动态链接器,我们需要i386构建libc6包。你可以使用以下命令安装它:

sudo apt-get install libc6:i386

然后,您应该能够ldd在二进制文件上运行以显示它可能需要的其他库。例如,在我的系统上:

[jk@pablo sqlite]$ ldd ./sqlite3 
linux-gate.so.1 =>  (0xf76f1000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf76c1000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf750d000)
/lib/ld-linux.so.2 (0xf76f2000)

由于所有这些库都存在(如果缺少某些东西ldd将会报告not found),我们应该可以运行该sqlite3命令。

相关内容