默认情况下如何配置应用程序以使用旧版本的库

时间:2012-10-16 12:00:38

标签: linux gcc shared-libraries

默认情况下,当操作系统上安装了该库的两个不同版本时,程序始终使用较新版本的库。如何配置我的系统以便所有应用程序默认使用旧版本的库?也许我应该使用lddldconfig,但我不确定如何实现这一目标。

以下更多详情: 我正在使用Xubuntu Precise,我遇到了以下难题:

  • Xubuntu Precise发货libpoppler v0.18.4 [1]并且所有Precise应用程序(Evince,Inkscape等)都是针对此版本的库构建的。
  • 我想构建并安装需要libpoppler >= v0.20的ViewPDF [2]。
  • 由于上述原因,我从Ubuntu Quantal [3]向后移植了libpoppler v0.20.4

以下是我系统上目前可用的库:

liv@liv-laptop:~$ locate libpoppler. | grep -i /usr/lib/
/usr/lib/x86_64-linux-gnu/libpoppler.a
/usr/lib/x86_64-linux-gnu/libpoppler.so
/usr/lib/x86_64-linux-gnu/libpoppler.so.19
/usr/lib/x86_64-linux-gnu/libpoppler.so.19.0.0
/usr/lib/x86_64-linux-gnu/libpoppler.so.28
/usr/lib/x86_64-linux-gnu/libpoppler.so.28.0.0

liv@liv-laptop:~$ ls -lh /usr/lib/x86_64-linux-gnu/libpoppler.*
-rw-r--r-- 1 root root 3.8M Sep 24 17:15 /usr/lib/x86_64-linux-gnu/libpoppler.a
lrwxrwxrwx 1 root root   20 Sep 24 17:14 /usr/lib/x86_64-linux-gnu/libpoppler.so -> libpoppler.so.28.0.0
lrwxrwxrwx 1 root root   20 Sep  4 12:35 /usr/lib/x86_64-linux-gnu/libpoppler.so.19 -> libpoppler.so.19.0.0
-rw-r--r-- 1 root root 2.0M Mar  1  2012 /usr/lib/x86_64-linux-gnu/libpoppler.so.19.0.0
lrwxrwxrwx 1 root root   20 Sep 24 17:14 /usr/lib/x86_64-linux-gnu/libpoppler.so.28 -> libpoppler.so.28.0.0
-rw-r--r-- 1 root root 2.4M Sep 24 17:15 /usr/lib/x86_64-linux-gnu/libpoppler.so.28.0.0

现在构建和运行ViewPDF工作得很好。然而,最大的问题是最初针对0.18.4构建的一些应用程序(xpdf,inkscape)已被破坏。

所以这是我的问题: 如何配置我的系统,以便所有应用程序默认使用旧版本的poppler库(libpoppler.so.19.0.0);并且只有针对较新版本(libpoppler.so.28.0.0)专门构建的应用才能使用最新版本?也许我应该使用ldd或ldconfig,但我不知道如何实现。

  1. http://packages.ubuntu.com/precise/libpoppler19
  2. http://www.qtrac.eu/viewpdf.html
  3. http://packages.ubuntu.com/quantal/libpoppler28

1 个答案:

答案 0 :(得分:1)

根据默认前缀/usr/local,将您构建的所有内容从源代码安装到configure

更新:如果您计划进一步分发此软件包,则需要采用不同的方法。我将创建一个名为/usr/lib/future的目录,并在其中放置libpoppler.so的高级版本。应用程序将使用-rpath=/usr/lib/future和可能-rpath-link=/usr/lib/future来链接它。