我正在尝试从源代码编译点云库(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
只有)。但我担心如果我通过 apt-get 安装了一个版本,并手动安装了另一个版本,可能会发生一些冲突。但是,如果有依赖此版本但与较新版本不兼容的软件包,libpng12-dev
则卸载可能会导致问题。libpng12-dev
因此,我想知道的是,我是否应该卸载/清除libpng12-dev
,然后手动安装新版本,或者简单地安装新版本同时保留旧版本。如果我选择后者,我如何确保我尝试编译的 PCL 二进制文件将链接到这个新库,而不是旧库?
谢谢 :)