c++ - 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 指令对我没有多大帮助。
提前致谢。
解决方案
我找到了 2 种可能的解决方案。
- 安装 dlib
sudo apt-get install libdlib-dev
在这种情况下,您应该将 dlib 链接到您的库目标,例如target_link_libraries(gazr dlib ${OpenCV_LIBRARIES})
记得使用find_package(dlib REQUIRED)
- 从源代码安装 dlib
也可以直接使用 dlib源文件。在这种情况下,您需要将 dlib 源目录添加到项目 usingadd_subdirectory(your_path/dlib dlib)
并将其添加到 librarytarget_link_libraries(gazr dlib ${OpenCV_LIBRARIES})
中。
注意:在这种情况下,您不得使用find_package(dlib REQUIRED)
希望这有帮助!
推荐阅读
- api - 为两个角色设计api——病人和医生
- php - 插入多行 PDO
- javascript - 我正在尝试使用 React-Native 将按钮放置在屏幕底部,我真的很难理解如何通过 flex 支持正确地做到这一点
- mysql - MySQL-8.0.11 "...LIMIT 1 FOR UPDATE SKIP LOCKED" 不适用于多种排序?
- python - 如何追溯字典的键?
- tomcat - Tomcat 嵌入式项目在 Eclipse 中工作,但作为可运行 Jar 失败
- reactjs - React-Bootstrap 中的 Form.Control 类型密码始终呈现我无法删除的默认密码
- php - PHP - 获取数据库输入的字段输入数
- eclipse - 在 hibernate maven 项目中,我应该将 hibernate.cfg.xml 文件放在哪里?请告诉正确的目录结构
- javascript - React setState 不是一个函数