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

vic*_*icd 5 database sqlite

我是 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$
Run Code Online (Sandbox Code Playgroud)

出于安全原因,我删除了 . 来自 $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
Run Code Online (Sandbox Code Playgroud)

这也适用于 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
Run Code Online (Sandbox Code Playgroud)

结果我遇到了这个问题,它适用于 Ubuntu 12.04 32 位,CenetOS 5.6 64 位,不适用于 Ubuntu 12.04 64 位,Fedora 17 64 位,sqlite 的 32 位二进制文​​件足够好,尽管它没有不适用于每个平台。我会记住,最好从源代码编译我自己的 64 位二进制文​​件,否则如果通过官方网站提供 sqlite 64 位二进制文​​件会很棒:P

Jer*_*err 6

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

例如,要安装sqlite3

sudo apt-get update
sudo apt-get install sqlite3
Run Code Online (Sandbox Code Playgroud)

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

[第一个命令,sudo apt-get update只是下载最新可用的软件包列表。每次要安装软件包时都不需要这样做]

然后,您可以运行 sqlite3:

sqlite3
Run Code Online (Sandbox Code Playgroud)

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

对于动态链接器,我们需要i386构建libc6包。您可以通过以下方式安装:

sudo apt-get install libc6:i386
Run Code Online (Sandbox Code Playgroud)

然后,您应该能够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)
Run Code Online (Sandbox Code Playgroud)

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