【问题标题】:Linking with a newer library rather than the old one与较新的库而不是旧库链接
【发布时间】:2015-08-13 14:09:48
【问题描述】:

我正在尝试从源代码 (http://pointclouds.org/) 编译点云库。运行 cmake 和 make 后,我收到以下链接错误:

Linking CXX executable ../../bin/pcl_convert_pcd_ascii_binary
../../lib/libpcl_io.so.1.7.2: undefined reference to `png_set_longjmp_fn'

作为一个新手,我不确定这个错误是什么意思,但我假设:它正在尝试构建的可执行文件plc_convert_pcd_ascii_binary,需要链接到库libpcl_io.so.1.7.2,但是这个库包含函数png_set_longjump_fun,找不到这个函数的定义?

所以,我尝试在 Stack Overflow 上查看了一些类似的问题,结果发现 png_set_longjump_fun 包含在 libpng 库中,但只是在 libpng-1.4.x 之后才引入的。运行dpkg -l | grep libpng* 后,我得到以下输出:

ii  libpng12-0:amd64                                      1.2.50-1ubuntu2                                     amd64        PNG library - runtime
ii  libpng12-dev                                          1.2.50-1ubuntu2                                     amd64        PNG library - development

看来我需要从libpng12-dev 升级到至少libpng14-dev。从libpng网站上看到可以下载到最新版本的源码(但是我能通过apt-get得到的最新版本只有libpng12-dev)。但是我担心如果我通过 apt-get 安装了一个版本,而手动安装了另一个版本,可能会出现一些冲突。但是,如果存在依赖于此但与较新版本不兼容的软件包,则卸载 libpng12-dev 可能会导致问题。

因此,我想知道的是我应该卸载/清除libpng12-dev,然后手动安装新版本,还是在保留旧版本的同时简单地安装新版本。如果我做后者,我如何确定我正在尝试编译的 PCL 二进制文件将链接到这个新库,而不是旧库?

谢谢:)

【问题讨论】:

    标签: c++ linker makefile shared-libraries point-cloud-library


    【解决方案1】:

    如果您从源代码编译,您可能甚至不需要安装。编译 libpng 后,在编译 PCL 时设置 CMAKE_PREFIX_PATH 以指向 libpng 构建树中的正确位置。这通常是用 cmake 完成的,所以在这种情况下应该可以工作。更多信息:

    http://www.cmake.org/cmake/help/v3.0/variable/CMAKE_PREFIX_PATH.html

    https://blogs.kde.org/2008/12/12/how-get-cmake-find-what-you-want-it

    cmake - find_library - custom library location

    How to point cmake at specific directory for library?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 1970-01-01
      相关资源
      最近更新 更多