我在我的/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项目)
提前致谢
答案 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
链接器标志。如果您与gcc
或g++
相关联,请按照以下方式使用:-Wl,-rpath=/usr/local/lib
。如果您使用ld
,请仅使用-rpath=/usr/local/lib
。
不触摸/usr/lib
中的内容,您将在下次软件更新后被刻录,并且您可能会破坏现有软件。
如果使用-rpath,则不需要使用LD_LIBRARY_PATH。您可以使用一个或另一个。