livox_ros2_driver编译报错

问题描述:

在colcon build时报错

/usr/bin/ld: /usr/local/lib/liblivox_sdk_static.a(device_discovery.cpp.o): relocation R_X86_64_TPOFF32 against symbol _ZGVZN6spdlog7details2os9thread_idEvE3tid' can not be used when making a shared object; recompile with -fPIC /usr/bin/ld: /usr/local/lib/liblivox_sdk_static.a(livox_sdk.cpp.o): relocation R_X86_64_PC32 against symbol stderr@@GLIBC_2.2.5' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: 最后的链结失败: bad value
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/livox_ros2_driver.dir/build.make:462:liblivox_ros2_driver.so] 错误 1问题描述:
make[1]: *** [CMakeFiles/Makefile2:80:CMakeFiles/livox_ros2_driver.dir/all] 错误 2

问题分析:

遇到报错不要慌,先仔细看日志,找到报错的原因

这个错误表明库文件liblivox_sdk_static.a没有使用-fPIC选项进行编译,而你正在尝试构建一个共享对象(shared object)。为了解决这个问题,你需要重新编译liblivox_sdk_static.a库文件,并确保使用了-fPIC选项。

问题解决:

SDK链接问题, 我们需要对SDK源码进行修改并重新编译安装SDK

在/livox-SDK/sdk_core/CMakeLists.cpp中找到如下行

set(SDK_LIBRARY ${PROJECT_NAME}_static)
add_library(${SDK_LIBRARY} STATIC "")

添加如下代码

target_compile_options(${SDK_LIBRARY} PRIVATE -fPIC)

使用target_compile_options()函数来为${SDK_LIBRARY}目标添加编译选项-fPIC。这将确保在编译时为静态库设置了正确的位置无关代码(Position Independent Code)标志。

保存并关闭后重新编译livox-SDK

mkdir build && cd build
cmake ..
make -j4
sudo make install

然后在工作空间把之前编译生成的删除重新编译

colcon build

至此 问题解决。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_johan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值