【发布时间】: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