首页 > 解决方案 > dlib 的链接问题:使用 -fPIC 重新编译

问题描述

我想使用这个依赖dlib的 ROS 包。我用 编译catkin build,但我猜我在链接时收到此错误:

/usr/bin/ld: /usr/lib/libdlib.a(threads_kernel_shared.o): relocation R_X86_64_PC32 against symbol `_ZN4dlib21threads_kernel_shared14thread_starterEPv' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
make[2]: *** [/home/alberto/tiago_dual_public_ws/devel/.private/gazr/lib/libgazr.so] Error 1
make[1]: *** [CMakeFiles/gazr.dir/all] Error 2
make: *** [all] Error 2

sudo apt-get install libdlib-dev我已经在我的 Ubuntu 18.05 (ROS Melodic) 机器上安装了 dlib 。我怎么解决这个问题?dlib 文档和 repo 指令对我没有多大帮助。

提前致谢。

标签: c++linkerlinker-errorsrosdlib

解决方案


我找到了 2 种可能的解决方案。

  1. 安装 dlibsudo apt-get install libdlib-dev

在这种情况下,您应该将 dlib 链接到您的库目标,例如target_link_libraries(gazr dlib ${OpenCV_LIBRARIES})

记得使用find_package(dlib REQUIRED)

  1. 从源代码安装 dlib

也可以直接使用 dlib源文件。在这种情况下,您需要将 dlib 源目录添加到项目 usingadd_subdirectory(your_path/dlib dlib)并将其添加到 librarytarget_link_libraries(gazr dlib ${OpenCV_LIBRARIES})中。

注意:在这种情况下,您不得使用find_package(dlib REQUIRED)

希望这有帮助!


推荐阅读