Ubuntu: Tiêu đề / nguồn không khớp SQLite (và khiến SVN sử dụng cài đặt SQLite đã cài đặt)


0

Tôi gặp SQLite header and source version mismatchvấn đề khó chịu khi thử chạy SQLite3 trên Ubuntu 13.04. Tôi đã thực hiện theo nhiều đơn đặt hàng khác nhau (và tất cả nhiều lần):

  • apt-get remove sqlite3 libsqlite3-devvà cài đặt lại
  • ldconfig
  • Tổng hợp sqlite từ nguồn bằng autoconftar.gz
  • Đã thử mọi thứ tôi tìm thấy trên Google ...

Tuy nhiên, tôi không thể tìm ra những gì sai. Tôi đã lãng phí 3 giờ trong cuộc đời mình cho việc này!

Và trên thực tế, tại sao điều sau đây xảy ra:

$ 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.

Nếu sqlite3không được cài đặt, làm sao nó có thể có sự không phù hợp?!

Cập nhật

Phải, nhờ Aaron, giờ tôi đã đi xa

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

Tôi đã chuyển chúng đến một thư mục tạm thời và bây giờ nhận được

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

tôi đã làm

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

VẪN nhận được cùng một lỗi không khớp

Và tôi đã xóa các tệp giả sqlite3.hsqlite3ext.hcác tệp vẫn còn xung quanh, lặp lại mọi thứ và vẫn gặp sự cố ...


Nếu sqlite3không được cài đặt, gọi nó trên dòng lệnh sẽ thất bại. Có lẽ có một bản sao vẫn được cài đặt ở đâu đó, có lẽ còn sót lại từ nỗ lực cài đặt thủ công của bạn; loại bỏ điều đó, xác nhận rằng updatedb; locate libsqlite3.sokhông tìm thấy gì ngoại trừ trong thư mục bản dựng của bạn, sau đó cài đặt lại qua apt-get.
Aaron Miller

Tôi đã cập nhật câu hỏi
ChrisW

Xin lỗi, tôi cũng nên đề cập đến các tệp tiêu đề; xem bạn đã libsqlite3.hđi loanh quanh đâu đó chưa, và tương tự chuyển chúng vào một thư mục tạm thời. (Có thể là aptsẽ không ghi đè lên các tệp đó khi cài đặt libsqlite3-dev.)
Aaron Miller

Yeh, tôi cũng đã làm điều đó và vẫn nhận được vấn đề: /
ChrisW

Tôi ước tôi biết những gì khác để đề nghị.
Aaron Miller

Câu trả lời:


1

Thêm nền tảng: Tôi đã cố gắng cài đặt SQLite3 vì khi tôi chạy bất kỳ lệnh SVN nào, tôi đã gặp lỗi:

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

Tôi giả định rằng việc sửa lỗi cài đặt SQLite của tôi sẽ khắc phục điều đó. Tuy nhiên, tôi nghĩ vấn đề chính là Ubuntu 13.04 yêu cầu SQLite 3.6.23 và đó là lý do tại sao chạy

apt-get purge libsqlite3-0 

xóa hầu hết Ubuntu (xem câu trả lời liên quan này để biết thêm chi tiết).

Sau rất nhiều lần đập đầu, la hét và khóc lóc, tôi quyết định thử cài đặt SVN từ nguồn (trái ngược với SQLite, đó là những gì tôi đã nói trong câu hỏi của mình). Điều này thực sự tương đối đơn giản, mặc dù hơi tốn thời gian.

Về cơ bản:

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

Sau đó tôi phát hiện ra mình cần thư viện APR và APR-utils, vì vậy:

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

... và thư viện serf (Tôi đã không biên dịch lần đầu tiên, nhưng điều này cung cấp hỗ trợ http - không có SVN chỉ có thể xử lý filesvngiao thức) ..:

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

Đây là các lệnh tương tự như trong serf README (nếu scons không được cài đặt thì nó có sẵn thông qua apt-get).

SVN cũng muốn tệp .c hợp nhất SQLite, vì vậy hãy tải xuống bản amalagationgỡ bỏ nó ngay bây giờ - Tôi đã tạo một ~/sqlite-amalgamationthư mục và để lại mọi thứ ở đây. Sau đó bạn nên sẵn sàng biên dịch svn. Serf nên đã được cài đặt đến một nơi tiêu chuẩn, vì vậy không cần một vị trí được chỉ định

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

và hy vọng đó là nó. Tôi có lỗi SVN của

The working copy needs to be upgraded

nhưng khi tôi thử svn upgradetôi đã gặp lỗi cơ sở dữ liệu SVN ... cách duy nhất là kiểm tra phiên bản mới vào một vị trí mới. Nhưng, SVN bây giờ hoạt động!

Nó không khắc phục được sự cố SQLite3 tiềm ẩn và tôi vẫn gặp lỗi không khớp phiên bản nguồn / tiêu đề tương tự khi thực hiện $ sqlite3, nhưng vì tôi không cần sử dụng SQLite độc ​​lập vào lúc này, vấn đề đó có thể đợi đến một ngày khác (hoặc, nó có phải là thứ gì đó nên được đăng ký là lỗi với Ubuntu không?)


Vui mừng khi biết bạn tìm thấy con đường của bạn xung quanh nó! Tôi sẽ thừa nhận, tôi đã không hài lòng với các bản phân phối "tự xây dựng" như Slackware và Gentoo, nhưng giữa điều này và các chuyến đi tôi đã chịu đựng trong nỗ lực (cuối cùng thành công) của mình để thiết lập một máy ảo Linux để lưu trữ Emacs trên Máy Windows của tôi ở nhà, tôi rất muốn cho họ một cái nhìn khác với đôi mắt tươi.
Aaron Miller

1

Tôi vừa thay thế phiên bản cũ hơn của thư viện SQlite @ location

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

với phiên bản mới hơn là @ location

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

Bây giờ phiên bản sqlite mới nhất

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

Điều này đã không làm việc cho tôi. Tôi vẫn nhận được 'phiên bản không khớp'
Jonathan Hartley

1

Điều này đã giải quyết trường hợp của tôi, linux đi kèm với một phiên bản cũ hơn của sqlite, đây là lý do tại sao nó mang lại vấn đề này, hãy làm điều này để sắp xếp nó.

  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

         Và sau đó sao chép cơ sở dữ liệu đã được biên dịch trong các gói Autoconf trong quá khứ:

        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

Vấn đề này đã được giải quyết. bạn sẽ cần phải chạy với sudo.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.