gpt4 book ai didi

c++ - PCL安装链接直接以某种方式 boost 安装目录

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:59 25 4
gpt4 key购买 nike

我在安装 PCL 时遇到了一个非常奇怪的问题。基本上我已经设置了 PCL、boost、cmake、flann 等。它们都能正确构建和编译。我复制并构建了 ICP example它构建得很好。

这就是奇怪的地方。当我运行该应用程序时,出现以下错误:

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 安装目录的绝对路径运行程序,那么这就是它变得疯狂的地方,即。 bin.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 文件路径的绝对链接。我不明白 PCLldd 或任何东西如何知道这条路径。

有人知道这是怎么发生的吗?我还需要一些关于如何修复它的解决方案。

编辑 + 添加:

最近,我不确定发生了什么变化,但我开始收到链接器警告(不是错误):

/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_filesystem-qcc-mt-1_55.so 将显示:

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。

关于c++ - PCL安装链接直接以某种方式 boost 安装目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23485903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com