我正在尝试从源代码(http://pointclouds.org/)编译Point Cloud Library。运行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二进制文件将链接到这个新库而不是旧库?
谢谢:)
答案 0 :(得分:0)
如果您从源代码编译,则可能甚至不需要安装。编译完libpng后,在编译PCL指向libpng构建树中的正确位置时设置CMAKE_PREFIX_PATH。这通常是用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