【问题标题】:How to use another version of library如何使用另一个版本的库
【发布时间】:2014-09-02 14:00:51
【问题描述】:

我在/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 项目)

提前致谢

【问题讨论】:

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


    【解决方案1】:

    链接您的应用程序时,不要使用-lpng,而是使用/usr/local/libpng14.so 或您正在使用的任何名称和路径。

    【讨论】:

    • 只是“-lpng14”也应该可以工作。但如果您正在进行新开发,您可能会考虑使用当前版本的 libpng16。
    • 你所有的答案都很好。格伦的提示是我想的最简单的,非常感谢
    【解决方案2】:

    您需要 (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。您可以使用一个另一个。

    【讨论】:

      猜你喜欢
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 2011-10-18
      • 1970-01-01
      相关资源
      最近更新 更多