我试图从源代码(http://pointclouds.org/)编译点云库。运行cmake并作出后,我收到以下错误链接:与较新的库链接而不是旧的链接
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
,并且找不到此函数的定义?
所以,我试着看了堆栈溢出的一些类似的问题,事实证明,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二进制文件将与这个新库相链接,而不是旧文件库?
谢谢:)