所以我有 Ubuntu 18.04,其中可以安装的最新版本的 sqlite3 (以及 libsqlite3-dev 和 libsqlite3-0)apt
是 3.22.0。我想安装 v3.25.0 或更高版本,因为它提供了我需要的新功能,我尝试通过 v3.25.0 的源代码来做到这一点,可从以下位置获取:https://distfiles.macports.org/sqlite3/
当我这样做时,我得到以下信息:
$ sudo make install-am
make[1]: Entering directory 'XXX/sqlite-autoconf-3250000'
/bin/mkdir -p '/usr/local/lib'
/bin/bash ./libtool --mode=install /usr/bin/install -c libsqlite3.la '/usr/local/lib'
libtool: install: /usr/bin/install -c .libs/libsqlite3.so.0.8.6 /usr/local/lib/libsqlite3.so.0.8.6
libtool: install: (cd /usr/local/lib && { ln -s -f libsqlite3.so.0.8.6 libsqlite3.so.0 || { rm -f libsqlite3.so.0 && ln -s libsqlite3.so.0.8.6 libsqlite3.so.0; }; })
libtool: install: (cd /usr/local/lib && { ln -s -f libsqlite3.so.0.8.6 libsqlite3.so || { rm -f libsqlite3.so && ln -s libsqlite3.so.0.8.6 libsqlite3.so; }; })
libtool: install: /usr/bin/install -c .libs/libsqlite3.lai /usr/local/lib/libsqlite3.la
libtool: install: /usr/bin/install -c .libs/libsqlite3.a /usr/local/lib/libsqlite3.a
libtool: install: chmod 644 /usr/local/lib/libsqlite3.a
libtool: install: ranlib /usr/local/lib/libsqlite3.a
libtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/sbin" ldconfig -n /usr/local/lib
----------------------------------------------------------------------
Libraries have been installed in:
/usr/local/lib
If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
- add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the 'LD_RUN_PATH' environment variable
during linking
- use the '-Wl,-rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to '/etc/ld.so.conf'
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
/bin/mkdir -p '/usr/local/bin'
/bin/bash ./libtool --mode=install /usr/bin/install -c sqlite3 '/usr/local/bin'
libtool: install: /usr/bin/install -c sqlite3 /usr/local/bin/sqlite3
/bin/mkdir -p '/usr/local/include'
/usr/bin/install -c -m 644 sqlite3.h sqlite3ext.h '/usr/local/include'
/bin/mkdir -p '/usr/local/share/man/man1'
/usr/bin/install -c -m 644 sqlite3.1 '/usr/local/share/man/man1'
/bin/mkdir -p '/usr/local/lib/pkgconfig'
/usr/bin/install -c -m 644 sqlite3.pc '/usr/local/lib/pkgconfig'
make[1]: Leaving directory 'XXX/sqlite-autoconf-3250000'
但是当我尝试运行使用较新版本 sqlite3 的二进制文件时,出现了缺少函数的错误:
经过一番查看后,我发现二进制文件使用的 libsqlite3 版本是默认安装在 ubuntu 18.04 上的旧版本,而不是我认为会用上面运行的命令安装的版本。
$ ls -l /usr/lib/x86_64-linux-gnu/libsqlite3*
lrwxrwxrwx 1 root root 19 april 28 16:04 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 -> libsqlite3.so.0.8.6
-rw-r--r-- 1 root root 1082648 april 28 16:04 /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6
我的问题是:
- 如何从源代码安装较新版本的 libsqlite3?
- 我知道可以使用 apt 安装 libsqlite3-dev 和 libsqlite3-0,但是正如我上面所说,它们的最新版本是 3.22.0 而我需要 3.25.0,但由于我假设 apt 不会从源(与 sqlite3 在同一个包中)安装库,有没有办法获取 apt 运行来安装它们的命令?
- 我需要覆盖现有安装吗?如果知道有许多其他软件包使用它们,是否安全?
- 如果我不需要覆盖现有安装,我是否可以告诉我的 shell 使用我想要的版本,以便当我运行使用 sqlite3 的二进制文件的命令时不会出现错误?