如何使用其他版本的库

时间:2014-09-02 14:00:51

标签: c++ ubuntu linker qmake shared-libraries

我在我的/usr/lib目录中安装了libpng 1.12(在apt-get的Ubuntu上)。我想使用1.14,所以我下载了它,编译并安装到/usr/local/lib。如何让我的编译器/链接器使用/ usr / locla中的库?

我试过这样做"愚蠢"方式 - 将/usr/lib/libpng.so/usr/lib/libpng12.so的链接更改为/usr/local/lib/libpng.so。程序编译并运行(使用LD_LIBRARY_PATH=/usr/local/lib),但有一个警告说它是使用以前的版本编译的,并使用较新的版本运行。

我该如何正确地做这件事? (我在Ubuntu 12.04上使用qmake项目)

提前致谢

2 个答案:

答案 0 :(得分:1)

关联应用时,不要使用-lpng使用/usr/local/libpng14.so或您正在使用的任何名称和路径。

答案 1 :(得分:0)

您需要(1)编译(2)链接和(3)使用新版本加载。

要针对新版本进行编译,请使用-I/path/to/includes/of/new/version标记(在您的情况下可能为-I/usr/local/include)。

要链接新版本,请使用-L /path/to/libs/of/new/version链接器标记(在您的情况下为-L /usr/local/lib)。

加载新版本有多种方法,最简单的方法可能是使用-rpath链接器标志。如果您与gccg++相关联,请按照以下方式使用:-Wl,-rpath=/usr/local/lib。如果您使用ld,请仅使用-rpath=/usr/local/lib

触摸/usr/lib中的内容,您将在下次软件更新后被刻录,并且您可能会破坏现有软件。

如果使用-rpath,则不需要使用LD_LIBRARY_PATH。您可以使用一个另一个。