2015-08-13 41 views
0

我试图从源代码(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二进制文件将与这个新库相链接,而不是旧文件库?

谢谢:)

回答

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

cmake - find_library - custom library location

How to point cmake at specific directory for library?