PCL安装链接直接到boost安装目录
PCL install links directly to boost installation directory somehow
我有一个非常奇怪的问题与PCL的安装。基本上我已经设置了PCL, boost, cmake, flann等。它都正确地构建和编译。我复制并构建了ICP的例子,它构建得很好。
这就是奇怪的地方。当我运行应用程序时,我得到以下错误:
ldd:FATAL: Could not load library bin.v2/libs/system/build/qcc-4.4.2/
release/threading-multi/libboost_system.so.1.48.0
因此,libboost_system.so.1.48.0
存在于/usr/local/lib
路径中,甚至更早地被相同的应用程序链接,即。如果我在应用程序上运行ldd
,我得到以下链接库信息:
$ ldd iterative_closest_point
./iterative_closest_point:
libboost_system.so => /usr/local/lib/libboost_system.so.1.48.0 (0xb8200000)
libboost_filesystem.so => /usr/local/lib/libboost_filesystem.so.1.48.0 (0xb8209000)
libboost_thread.so => /usr/local/lib/libboost_thread.so.1.48.0 (0xb8225000)
OTHER BOOST
libpcl_common.so.1.7 => /usr/local/lib/libpcl_common.so.1.7.1 (0xb82ea000)
libpcl_octree.so.1.7 => /usr/local/lib/libpcl_octree.so.1.7.1 (0xb838c000)
OTHER PCL
libstdc++.so.6 => /usr/qnx650/target/qnx6/x86/lib/libstdc++.so.6.0.13 (0xb9285000)
libm.so.2 => /usr/qnx650/target/qnx6/x86/lib/libm.so.2 (0xb8774000)
libc.so.3 => /usr/lib/ldqnx.so.2 (0xb0300000)
ldd:FATAL: Could not load library bin.v2/libs/system/build/qcc-4.4.2/release/threading-multi/libboost_system.so.1.48.0
所以我调查了一下PCL到底在找什么,bin.v2是什么?它存在于boost安装目录????中
现在,如果我在boost安装目录ie中使用绝对路径运行程序,它就会变得疯狂。垃圾箱在哪里。V2文件夹存在:
qnx:/root/boost/boost_1_48_0# /root/experiments/checkPCL/iterative_closest_point
它! !程序输出所需的东西。所以我就像,好吧,让我们在这里运行ldd:
qnx:/root/boost/boost_1_48_0# ldd /root/experiments/checkPCL/iterative_closest_point
,我们得到这个:
libboost_system.so => /usr/local/lib/libboost_system.so.1.48.0 (0xb8200000)
MORE BOOST
libpcl_common.so.1.7 => /usr/local/lib/libpcl_common.so.1.7.1 (0xb82ea000)
MORE PCL
libstdc++.so.6 => /usr/qnx650/target/qnx6/x86/lib/libstdc++.so.6.0.13 (0xb9285000)
libm.so.2 => /usr/qnx650/target/qnx6/x86/lib/libm.so.2 (0xb8774000)
libc.so.3 => /usr/lib/ldqnx.so.2 (0xb0300000)
libboost_system.so.1.48.0 => /root/SMG/extern/libs/boost/boost_1_48_0/bin.v2/libs/system/build/qcc-4.4.2/release/threading-multi/libboost_system.so.1.48.0 (0xb87a7000)
libbz2.so.1.0.4 => /usr/lib/libbz2.so.1.0.4 (0xb87b0000)
libz.so.2 => /proc/boot/libz.so.2 (0xb87c2000)
大的长是到boost文件路径的绝对链接。我不明白PCL
或ldd
或任何东西是如何知道这条路径的。
有人知道这是怎么发生的吗?我还需要一些关于如何解决它的解决方案。
EDIT + ADD:
所以最近,我不知道发生了什么变化,但我已经开始得到链接器警告(不是错误):
/usr/qnx650/host/qnx6/x86/usr/bin/ntox86-ld: warning: bin.v2/libs/system/build/
qcc-4.4.2/release/threading-multi/libboost_system.so.1.48.0, needed by
/usr/local/lib/libboost_filesystem.so, not found (try using -rpath or -rpath-link)
所以无论出于什么原因,这肯定是试图链接到bin.v2/.../...
,这绝对是疯狂的,我以前从未见过这个?我现在已经搜索了boost安装目录,寻找可能导致这种情况的原因。安装boost的方式没有什么不同寻常的。
作为进一步的说明,我做了一个简单的例子,一个程序,有main,包括和打印"it works",它有以下CMakeLists.txt:
find_package(PCL 1.2 REQUIRED)
find_package(Boost 1.48.0 COMPONENTS system filesystem REQUIRED)
add_executable (test test.cpp)
target_link_libraries(test
${BOOST_FILESYSTEM} #Works
${PCL_DEFINITIONS} #Works
${PCL_SEARCH_LIBRARIES} #If i add this it fails!
)
所以看起来PCL和boost相互作用很糟糕,导致了一些真正疯狂的行为!
这可能没有帮助,但我有同样的问题,这是我发现的。这个路径被一些boost库使用。
objdump -x libbost_filessystem -qcc-mt-1_55。因此将显示:
Dynamic Section:
NEEDED bin.v2/libs/system/build/qcc/release/threading-multi/libboost_system-qcc-mt-1_55.so.1.55.0
NEEDED libm.so.2
NEEDED libstdc++.so.6
NEEDED libc.so.3
INIT 0x00004d40
注意完整路径。
我在寻找这个问题的解决方案时看到了这篇文章。我很确定这是一个增强构建相关的问题,虽然,我也使用QNX。
如果它在包含bin.v2/libs/system/build/qcc-4.4.2/release/threading-multi/
的绝对目录下工作,那么你可能有
- 设置
LD_LIBRARY_PATH
设置包括.
(当前工作目录) - 以某种方式(有几种方式)使用
ldconfig
添加当前工作目录
真正的问题似乎仍然是链接器嵌入了libboost_system
的完整路径。我不知道是什么原因,但也许
- 你指定库作为一个具体的源(
libboost_system.so.1.48.0
而不是-lboost_system
在大多数链接器/编译器) - 它是某种链接选项(如
-rpath
?)
希望能有所帮助
- C++:如何在CLion IDE中安装Boost
- 如何在 Mac OS 上安装 boost-mpi 及其对 clang 的依赖关系?
- 在 Windows 10 上安装 Boost 时遇到问题
- 无法在 OS X Sierra 上安装 boost
- boost_signals 使用 brew 安装 boost 时缺少库
- 我是否需要安装Boost来构建odeint
- 非相互互动安装Boost二进制
- 如何在Ubuntu中安装Boost多重任库
- 在Windows 8.1上安装Boost Python,正确设置工具链
- 如何在我的mac上安装boost
- 在macosx上安装boost和PyUblas时出错
- 使用单独的Boost库进行编译,无需安装Boost
- 在 Ubuntu 12.04 中编译并安装 Boost 1.34.1
- 如何在 OSX 中安装 boost
- 安装 boost 会搞砸我的程序吗?
- 从源代码编译后未安装 Boost ptr_container库
- 在 debian 中安装 boost(用于代码块)
- 无法成功安装 Boost.Python
- 在 Mac 上安装 Boost with CodeBlocks
- <dir> 因缺乏而跳过...尝试在 Ubuntu 1.49 上安装 Boost 11.04 时出错