Ubuntu:SQLite 标头/源不匹配(并使 SVN 使用已安装的 SQLite 安装)

Ubuntu:SQLite 标头/源不匹配(并使 SVN 使用已安装的 SQLite 安装)

SQLite header and source version mismatch在 Ubuntu 13.04 上尝试运行 SQLite3 时遇到了一个恼人的问题。我按照各种顺序(并且多次)执行过:

  • apt-get remove sqlite3 libsqlite3-dev并重新安装
  • ldconfig
  • autoconf使用tar.gz从源代码编译 sqlite
  • 尝试了我在 Google 上找到的所有方法......

但我不明白哪里出了问题。我已经在这上面浪费了 3 个小时!

事实上,为什么会出现以下情况:

$ sqlite3
SQLite header and source version mismatch
2010-03-09 19:31:43 4ae453ea7be69018d8c16eb8dabe05617397dc4d
2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
$ apt-get remove sqlite3
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package 'sqlite3' is not installed, so not removed
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

如果sqlite3没有安装,它怎么会认为不匹配?!

更新

好的,感谢 Aaron,我现在已经

$ locate libsqlite3.so
/usr/local/lib/libsqlite3.so
/usr/local/lib/libsqlite3.so.0
/usr/local/lib/libsqlite3.so.0.8.6

我已将它们移至临时目录,现在得到

$ sqlite3
The program 'sqlite3' is currently not installed. You can install it by typing:
sudo apt-get install sqlite3

我做到了

$ apt-get install sqlite3
$ apt-get install libsqlite3-dev

仍然得到相同的不匹配错误

我已经删除了仍然存在的虚假sqlite3.h文件sqlite3ext.h,重复了所有内容,但问题仍然存在......

答案1

更多背景信息:我尝试安装 SQLite3,因为当我运行任何 SVN 命令时,都会出现错误:

E200029: Couldn't perform atomic initialization 
E200030: SQLite compiled for 3.7.15.2, but running with 3.6.23

我以为修复 SQLite 安装就可以解决这个问题。然而,我思考主要问题是 Ubuntu 13.04需要SQLite 3.6.23,这就是为什么运行

apt-get purge libsqlite3-0 

删除大部分 Ubuntu(参见这个相关答案了解更多详细信息)。

经过多次的头撞、喊叫和哭泣之后,我决定尝试从源代码安装 SVN(而不是 SQLite,我在问题中说过我就是这么做的)。这实际上相对简单,尽管有点耗时。

基本上:

wget http://mirror.ox.ac.uk/sites/rsync.apache.org/subversion/subversion-1.8.1.tar.bz2
tar xjvf subversion-1.8.1.tar.bz2

然后我发现我需要 APR 和 APR-utils 库,所以:

wget http://mirror.ox.ac.uk/sites/rsync.apache.org/apr/apr-1.4.8.tar.bz2
wget http://mirror.ox.ac.uk/sites/rsync.apache.org/apr/apr-util-1.5.2.tar.bz2

tar xjvf apr-1.4.8.tar.bz2
cd apr-1.4.8
./configure
make
sudo make install
cd ..
tar xjvf apr-util-1.5.2.tar.bz2
cd apr-util-1.5.2
./configure --with-apr=/usr/local/apr
make
sudo make install

...和 ​​serf 库(我第一次没有用它编译,但是它提供了 http 支持 - 没有它 SVN 只能处理filesvn协议)..:

wget https://serf.googlecode.com/files/serf-1.3.0.tar.bz2
tar xjvf serf-1.3.0.tar.bz2
scons APR=/usr/local/apr APU=/usr/local/apr
sudo scons install
scons -c

这些命令与serf 自述文件(如果未安装 scons,可以通过 获得apt-get)。

SVN 还需要 SQLite 合并 .c 文件,因此下载现在解压它 - 我创建了一个~/sqlite-amalgamation文件夹并将所有内容留在这里。然后您应该可以编译 svn。Serf 应该安装在标准位置,因此不需要指定位置

sudo ./configure --with-sqlite=/home/chris/sqlite-amalgamation/sqlite3.c --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr --with-serf
make
sudo make install

希望就是这样。我遇到了 SVN 错误

The working copy needs to be upgraded

但当我尝试时,svn upgrade出现了 SVN 数据库错误... 唯一的解决方法是将新版本签出到新位置。但是,SVN 现在可以正常工作了!

它不能修复底层的 SQLite3 问题,而且我在执行时仍然会收到相同的标头/源版本不匹配错误$ sqlite3,但由于我目前不需要使用独立 SQLite,因此该问题可以等到另一天(或者,它实际上是应该在 Ubuntu 中注册为错误的东西?)

答案2

我刚刚替换了旧版本的 SQlite 库@位置

"/usr/lib/i386-linux-gnu/libsqlite3.so.0.8.6" 

较新的版本是 @ location

"/usr/local/lib/libsqlite3.so.0.8.6"

现在是最新的 sqlite 版本

$ sqlite3 --version 
3.8.2 2013-12-06 14:53:30 27392118af4c38c5203a04b8013e1afdb1cebd0d

答案3

这解决了我的问题,linux 附带了旧版本的 sqlite,这就是它带来这个问题的原因,这样做可以解决它。

  1. mv /usr/lib/i386-linux-gnu/libsqlite3.so.0.8.6 /usr/lib/i386-linuxgnu/libsqlite3.so.0.8.6_bak

  2. mv /usr/lib/i386-linux-gnu/libsqlite3.so.0 /usr/lib/i386-linux-gnu/libsqlite3.so.0_bak

         然后把编译好的Autoconf包中的数据库复制过去:

        1. cd /usr/local/lib

        2. cp libsqlite3.so.0.8.6 /usr/lib/i386-linux-gnu

       3. cp libsqlite3.so.0 /usr/lib/i386-linux-gnu

这个问题已经解决。您将需要使用 sudo 运行。

相关内容