在编译涉及到pinocchio
库的时候,可能会出现与hpp-fcl
库有关的下列问题:
/usr/bin/ld: warning: libhpp-fcl.so, needed by /home/zyq/A_Biped/cetc_humbot0812/src/library/pinocchio/lib/libpinocchio.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: /home/zyq/A_Biped/cetc_humbot0812/src/library/pinocchio/lib/libpinocchio.so: undefined reference to vtable for hpp::fcl::Box'
/usr/bin/ld: /home/zyq/A_Biped/cetc_humbot0812/src/library/pinocchio/lib/libpinocchio.so: undefined reference to vtable for hpp::fcl::Sphere'
/usr/bin/ld: /home/zyq/A_Biped/cetc_humbot0812/src/library/pinocchio/lib/libpinocchio.so: undefined reference to vtable for hpp::fcl::MeshLoader'
/usr/bin/ld: /home/zyq/A_Biped/cetc_humbot0812/src/library/pinocchio/lib/libpinocchio.so: undefined reference to vtable for hpp::fcl::Capsule'
/usr/bin/ld: /home/zyq/A_Biped/cetc_humbot0812/src/library/pinocchio/lib/libpinocchio.so: undefined reference to hpp::fcl::AABB::AABB()'
/usr/bin/ld: /home/zyq/A_Biped/cetc_humbot0812/src/library/pinocchio/lib/libpinocchio.so: undefined reference to vtable for hpp::fcl::Cylinder'
/usr/bin/ld: /home/zyq/A_Biped/cetc_humbot0812/src/library/pinocchio/lib/libpinocchio.so: undefined reference to hpp::fcl::BVHModelBase::buildConvexRepresentation(bool)'
collect2: error: ld returned 1 exit status
make[2]: *** [humbot_control/CMakeFiles/junior_ctrl.dir/build.make:584:/home/zyq/A_Biped/cetc_humbot0812/devel/lib/humbot_control/junior_ctrl] 错误 1
make[1]: *** [CMakeFiles/Makefile2:3876:humbot_control/CMakeFiles/junior_ctrl.dir/all] 错误 2
make: *** [Makefile:146:all] 错误 2
Invoking "make -j20 -l20" failed
你遇到的错误表明在链接阶段找不到必要的库文件,并且未能解决一些未定义的符号引用问题。具体来说:
libhpp-fcl.so
找不到:
这是一个 hpp-fcl
库的缺失问题。你需要确保这个库文件存在于你的系统中,并且链接器可以找到它。
undefined reference
错误:
这类错误表明 libpinocchio.so
依赖的 hpp-fcl
库中包含的符号在链接时没有被找到。这可能是由于 hpp-fcl
库没有正确安装或配置,或者 libpinocchio
在编译时没有正确链接到 hpp-fcl
。
解决步骤
- 安装
hpp-fcl
:
确保hpp-fcl
库已经安装。如果没有安装,你可以通过包管理器或从源代码编译安装:
sudo apt install ros-noetic-hpp-fcl
- 设置
LD_LIBRARY_PATH
:
如果你已经安装了hpp-fcl
库,但仍然遇到找不到库文件的错误,你可能需要设置LD_LIBRARY_PATH
环境变量以包含库文件的路径:
export LD_LIBRARY_PATH=/path/to/hpp-fcl/lib:$LD_LIBRARY_PATH
- 检查
CMakeLists.txt
配置:
确保CMakeLists.txt
文件中正确地链接了hpp-fcl
库。在target_link_libraries
中添加hpp-fcl
:
target_link_libraries(your_target
pinocchio
hpp-fcl
...
)
- 检查
hpp-fcl
库文件:
确认hpp-fcl
的库文件存在于指定的路径中,并且该路径在你的编译和链接路径中。例如,确认libhpp-fcl.so
文件在/usr/lib
或/usr/local/lib
中。
总结
你的错误主要是由于找不到 hpp-fcl
库和链接时未能解析符号。通过确保正确安装和配置 hpp-fcl
,设置 LD_LIBRARY_PATH
和 CMakeLists.txt
中的链接选项,应该能够解决这些问题。