我是 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
命令。