当前位置: 首页 > news >正文

记录YDLidar驱动包交叉编译时出现的一点问题

由于一不小心把交叉编译的系统根目录破坏了,所以一股脑将交叉编译系统根目录全删了重新安装,安装后,交叉编译发现ydlidar的ros包驱动出现了库无法链接的错误(刚刚还是好好的),但是又想不起来之前是怎么解决的了,所以还是一步一步重新解决这个问题吧(以后碰见啥问题怎么解决还是记录一下吧,因为过一段时间真会忘!!!)

编译错误来自ydlidar_ros_driver-master这个ros包,错误如下:

[ 93%] Linking CXX executable /home/lwh/code/rk3399_ws/devel/lib/ydlidar_ros_driver/ydlidar_ros_driver_node
/usr/lib/gcc-cross/aarch64-linux-gnu/7/../../../../aarch64-linux-gnu/bin/ld: 当搜索用于 //usr/local/lib/libydlidar_sdk.a 时跳过不兼容的 -lydlidar_sdk
/usr/lib/gcc-cross/aarch64-linux-gnu/7/../../../../aarch64-linux-gnu/bin/ld: 找不到 -lydlidar_sdk
collect2: error: ld returned 1 exit status
ydlidar_ros_driver-master/CMakeFiles/ydlidar_ros_driver_node.dir/build.make:115: recipe for target '/home/lwh/code/rk3399_ws/devel/lib/ydlidar_ros_driver/ydlidar_ros_driver_node' failed
make[2]: *** [/home/lwh/code/rk3399_ws/devel/lib/ydlidar_ros_driver/ydlidar_ros_driver_node] Error 1
CMakeFiles/Makefile2:2210: recipe for target 'ydlidar_ros_driver-master/CMakeFiles/ydlidar_ros_driver_node.dir/all' failed
make[1]: *** [ydlidar_ros_driver-master/CMakeFiles/ydlidar_ros_driver_node.dir/all] Error 2
make[1]: *** 正在等待未完成的任务....

可以看到链接器ld在在对目标文件链接时无法找到匹配的库-lydlidar_sdk,
ydlidar_sdk库是通过find_package()查找的,CMakeLists.txt内容如下:

find_package(ydlidar_sdk REQUIRED)
...
add_executable(${PROJECT_NAME}_node src/ydlidar_ros_driver.cpp)#---------------------------------------------------------------------------------------
#link library directories
target_link_directories(${PROJECT_NAME}_node PRIVATE${YDLIDAR_SDK_LIBRARY_DIRS}
)
target_link_libraries(${PROJECT_NAME}_node${catkin_LIBRARIES}${YDLIDAR_SDK_LIBRARIES}-pthread)

其中,target_link_directories()作用是设置链接器链接目标target时查找库的路径,通过message()打印YDLIDAR_SDK_LIBRARY_DIRS,发现这个变量为空,那么这样的话只要将YDLIDAR_SDK_LIBRARY_DIRS设置为正确的库路径,那么应该就能解决这个问题。

接着打开find_package()所查找并执行的cmake配置文件ydlidar_sdkConfig.cmake,可以看到如下内容:

SET( YDLIDAR_SDK_LIBRARIES  "ydlidar_sdk;pthread;rt" CACHE INTERNAL "YDLIDAR_SDK libraries" FORCE )
SET( YDLIDAR_SDK_INCLUDE_DIRS /usr/local/include/src;/usr/local/include CACHE INTERNAL "YDLIDAR_SDK include directories" FORCE )
SET( YDLIDAR_SDK_LIBRARY_DIRS  CACHE INTERNAL "YDLIDAR_SDK library directories" FORCE )mark_as_advanced( YDLIDAR_SDK_LIBRARIES )
mark_as_advanced( YDLIDAR_SDK_LIBRARY_DIRS )
mark_as_advanced( YDLIDAR_SDK_INCLUDE_DIRS )

可以看到,缓存变量YDLIDAR_SDK_LIBRARIES设置为了"ydlidar_sdk;pthread;rt",这意味着target_link_libraries()将会根据这个变量链接
名称为ydlidar_sdk,pthread和rt的库,注意这个名称不是库文件名,而是库的标识名,是在add_library()中设置的,对于静态库,标识名为ydlidar_sdk的库实际的库文件名为libydlidar_sdk.a, 对于共享库为libydlidar_sdk.so。
而YDLIDAR_SDK_INCLUDE_DIRS的路径是原X86系统的路径,这显然是不正确的,应该要改为交叉编译的系统根目录路径。
另外,YDLIDAR_SDK_LIBRARY_DIRS,库的链接路径这里直接设置为了空,这里也要修改。

最后修改后的内容如下:

SET( YDLIDAR_SDK_LIBRARIES  "ydlidar_sdk;pthread;rt" CACHE INTERNAL "YDLIDAR_SDK libraries" FORCE )
SET( YDLIDAR_SDK_INCLUDE_DIRS  /交叉编译系统根目录/usr/local/include/src;/交叉编译系统根目录/usr/local/include CACHE INTERNAL "YDLIDAR_SDK include directories" FORCE )
SET( YDLIDAR_SDK_LIBRARY_DIRS  /交叉编译系统根目录/usr/local/lib CACHE INTERNAL "YDLIDAR_SDK library directories" FORCE )mark_as_advanced( YDLIDAR_SDK_LIBRARIES )
mark_as_advanced( YDLIDAR_SDK_LIBRARY_DIRS )
mark_as_advanced( YDLIDAR_SDK_INCLUDE_DIRS )

修改后保存,再执行交叉编译,编译通过。

相关文章:

记录YDLidar驱动包交叉编译时出现的一点问题

由于一不小心把交叉编译的系统根目录破坏了,所以一股脑将交叉编译系统根目录全删了重新安装,安装后,交叉编译发现ydlidar的ros包驱动出现了库无法链接的错误(刚刚还是好好的),但是又想不起来之前是怎么解决的了,所以还…...

嵌入式学习笔记(32)S5PV210的向量中断控制器

6.6.1异常处理的2个阶段 可以将异常处理分为2个阶段来理解。第一个阶段是异常向量表跳转;第二个阶段是进入了真正的异常处理程序irq_handler之后的部分。 6.6.2回顾:中断处理的第一个阶段(异常向量表跳转阶段)处理 (…...

linux下安装qt、qt触摸屏校准tslib

linux下安装qt 在 Linux 系统下安装 Qt,可以通过以下步骤进行操作:1. 下载 Qt 安装包:首先,你需要从 Qt 官方网站(https://www.qt.io/)下载适用于 Linux 的 Qt 安装包。选择与你的系统和需求相匹配的版本&…...

C++之unordered_map,unordered_set模拟实现

unordered_map,unordered_set模拟实现 哈希表源代码哈希表模板参数的控制仿函数增加正向迭代器实现*运算符重载->运算符重载运算符重载! 和 运算符重载begin()与end()实现 unordered_set实现unordered_map实现map/set 与 unordered_map/unordered_set对比哈希表…...

React Router,常用API有哪些?

react-router React Router是一个用于构建单页面应用程序(SPA)的库,它是用于管理React应用中页面导航和路由的工具。SPA是一种Web应用程序类型,它在加载初始页面后,通过JavaScript来动态加载并更新页面内容&#xff0…...

JVM类加载和双亲委派机制

当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把类加载到JVM,本文主要说明类加载机制和其具体实现双亲委派模式。 一、类加载机制 类加载过程: 类加载的过程是将类的字节码加载到内存中的过程,主要包括…...

P-MVSNet ICCV-2019 学习笔记总结 译文 深度学习三维重建

文章目录 5 P-MVSNet ICCV-20195.0 主要特点5.1 文章概述5.2 研究方法5.2.1 特征提取5.2.2 学习局域匹配置信5.2.3 深度图预测5.2.4 Loss方程MVSNet系列最新顶刊 对比总结5 P-MVSNet ICCV-2019 深度学习三维重建 P-MVSNet-ICCV-2019(原文、译文、批注) 下载 5.0 主要特点 …...

vueshowpdf 移动端pdf文件预览

1、安装 npm install vueshowpdf -S2、参数 属性说明类型默认值v-model是否显示pdf--pdfurlpdf的文件地址String- scale 默认放大倍数 Number1.2 minscale 最小放大倍数 Number0.8 maxscale 最大放大倍数 Number2 3、事件 名称说明回调参数closepdf pdf关闭事件-pdferr文…...

C#根据excel文件中的表头创建数据库表

C#根据excel文件中的表头创建数据库表 private void button1_Click(object sender, EventArgs e){string tableName tableNameTextBox.Text;string connectionString "";using (OpenFileDialog openFileDialog new OpenFileDialog()){openFileDialog.Filter &quo…...

js通过xpath定位元素并且操作元素以下拉框select为例

js也可以使用xpath定位元素,现在实例讲解。 页面上有一个下拉框,里面内容有三个,用F12看一下 一、使用xpath定位这个下拉框select eldocument.evaluate(//select[name"shoppingPreference"], document).iterateNext()二、为下拉框…...

数据类型

目录 1.数值类型 整数类型 int 小数类型 double 2.字符类型 固定长度字符串 char 可变长度字符串 varchar 3.日期时间类型 日期类型:date 日期时间类型:datetime MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article…...

vue 模板应用

一&#xff0c;模板应用也就是对DOM的操作 二&#xff0c;如何使用 通过标签里面添加ref 和vue中使用 this.$refs.ref的名字.操作 进行使用 <template><h3>模板引用</h3><div ref"cont" class"cont">{{ content }}</div>&…...

Golang教程与Gin教程合集,入门到实战

GolangGin框架GormRbac微服务仿小米商城项目实战视频教程Docker Swarm K8s云原生分布式部署 介绍&#xff1a; Go即Golang&#xff0c;是Google公司2009年11月正式对外公开的一门编程语言&#xff0c;它不仅拥有静态编译语言的安全和高性能&#xff0c;而 且又达到了动态语言开…...

国家网络安全周 | 天空卫士荣获“2023网络安全优秀创新成果大赛优胜奖”

9月11日上午&#xff0c;四川省2023年国家网络安全宣传周在泸州开幕。在开幕式上&#xff0c;为2023年网络安全优秀创新成果大赛——成都分站赛暨四川省“熊猫杯”网络安全优秀作品大赛中获奖企业颁奖&#xff0c;天空卫士银行数据安全方案获得优秀解决方案奖。 本次比赛由四川…...

Swift学习笔记一(Array篇)

目录 0 绪论 1 数组的创建和初始化 2.数组遍历 2.1通过键值对遍历 2.2 通过forEach遍历 2.3 通过for in遍历 2.3.1 for in 搭配 enumerated 2.3.2 for in的另一种形式 2.3.2 for in 搭配 indices 2.4 通过Iterator遍历器遍历 3 数组的操作 3.1 contains 判断数组包含…...

C++项目实战——基于多设计模式下的同步异步日志系统-②-前置知识补充-不定参函数

文章目录 专栏导读不定参函数C风格不定参函数不定参宏函数 专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0c;C/C领域新星创作者&#xff0c;新星计划导师&#xff0c;阿里云专家博主&#xff0c;CSDN内容合伙人…致力于 C/C、Linux 学…...

C++使用Boost库加入UDP组播时程序崩溃

程序崩溃情况 本程序运行在Oracle VM VirtualBox虚拟的Ubuntu20.04上 terminate called after throwing an instance of ‘boost::wrapexceptboost::system::system_error’ what(): set_option: No such device 已放弃 (核心已转储) ** C使用Boost库加入组播的代码 #inclu…...

华为HCIA(四)

链路聚合可以负载分担&#xff0c;增加带宽&#xff0c;提高可靠性 Eth-trunk的传输速率和成员端口数量喝带宽有关 路由器分割广播域&#xff0c;交换机分割冲突域 指定端口&#xff1a;DP;根端口&#xff1a;RP;阻塞端口&#xff1a;AP 如果目的MAC不在交换机MAC中&…...

Qt --- Day01

效果图&#xff1a; 头像的圆形未实现 单击登陆&#xff0c;触发信号与槽 enter_widget.h #ifndef ENTER_H #define ENTER_H#include <QDialog> #include<QLabel> #include<QTimer> class enter_widget : public QDialog {Q_OBJECT public:explicit enter_…...

24.98万起,新一代AITO问界M7值得买吗?

监制 | 何玺 排版 | 叶媛 问界汽车新品来袭。 9月12日下午&#xff0c;问界汽车为全新的M7系列车型举行了发布会。华为常务董事余承东&#xff0c;在全网一片“遥遥领先”呼声的烘托下&#xff0c;上台发表演讲&#xff0c;详细介绍了M7的全面升级和各大亮点。 01 新一代AI…...

GIL-Free Python并发仅剩最后1%难题:我们用37小时逆向分析PyO3内存模型,找到共享引用计数的终极解法

第一章&#xff1a;GIL-Free Python并发的终极挑战与破局意义Python 的全局解释器锁&#xff08;GIL&#xff09;长期被视为多核 CPU 利用率的“天花板”。它确保同一时刻仅有一个线程执行 Python 字节码&#xff0c;虽简化了内存管理与 C 扩展开发&#xff0c;却在 CPU 密集型…...

新手必看:用Cisco Packet Tracer一步步配置VLAN(附常见错误排查)

从零开始掌握Cisco Packet Tracer中的VLAN配置&#xff1a;完整指南与避坑手册 在计算机网络的学习和实践中&#xff0c;虚拟局域网(VLAN)技术是每个网络工程师必须掌握的核心技能之一。无论你是正在准备CCNA认证的学生&#xff0c;还是需要为企业部署网络架构的IT专业人员&…...

拆解RoboteX AVATAR机器人:4个电机如何驱动履带+摇臂?一份紧凑传动布局的保姆级图解

RoboteX AVATAR机器人传动系统深度解析&#xff1a;四电机协同驱动履带与摇臂的机械艺术 当第一次看到RoboteX AVATAR Tactical Robot在复杂地形中自如穿梭的视频时&#xff0c;很难不被它那看似简单却异常高效的移动方式所吸引。这款战术机器人的核心秘密&#xff0c;就藏在它…...

USB2.0供电那些事儿:为什么你的外设总是供电不足?

USB2.0供电困境解析&#xff1a;从原理到实践的全面解决方案 当你的移动硬盘突然断开连接&#xff0c;或者外接键盘间歇性失灵时&#xff0c;很可能正遭遇USB2.0供电不足的经典难题。这种看似简单的接口背后&#xff0c;隐藏着复杂的电力分配机制与设备兼容性博弈。本文将带你穿…...

OpenClaw智能剪贴板:GLM-4.7-Flash增强复制粘贴功能

OpenClaw智能剪贴板&#xff1a;GLM-4.7-Flash增强复制粘贴功能 1. 为什么我们需要更聪明的剪贴板 作为一个每天要和大量文本打交道的技术写作者&#xff0c;我经常陷入这样的困境&#xff1a;从网页复制的内容带着乱七八糟的格式&#xff0c;从PDF摘录的段落夹杂着换行符和乱…...

基于西门子PLC的矿井通风控制系统(含IO表、PLC引脚图、程序) PLC程序设计,价格便宜

基于西门子PLC的矿井通风控制系统&#xff08;含IO表、PLC引脚图、程序&#xff09; PLC程序设计&#xff0c;价格便宜&#xff0c;plc触摸屏上位机程序设计&#xff0c;编写。 西门子plc仿真程序设计 提供程序说明&#xff0c; plc程序代写 PLC程序设计、代做 图片为案例 接设…...

AutoDL云服务器避坑指南:从PyTorch到Jupyter,手把手搞定GPU环境配置

AutoDL云服务器GPU环境配置实战&#xff1a;从镜像选择到Jupyter避坑全攻略 第一次在AutoDL这类云GPU平台上配置深度学习环境时&#xff0c;那种既兴奋又忐忑的心情我至今记忆犹新。看着琳琅满目的镜像选项和复杂的版本匹配要求&#xff0c;稍有不慎就会陷入"版本地狱&qu…...

QLVideo:macOS视频管理效率提升的完整解决方案

QLVideo&#xff1a;macOS视频管理效率提升的完整解决方案 【免费下载链接】QuickLookVideo This package allows macOS Finder to display thumbnails, static QuickLook previews, cover art and metadata for most types of video files. 项目地址: https://gitcode.com/g…...

STM32智能甲鱼养殖系统设计与实现

基于STM32的智能甲鱼养殖系统设计与实现1. 项目概述1.1 系统背景现代水产养殖行业正面临从传统人工管理向智能化转型的关键时期。甲鱼作为对水质环境敏感的特种水产品&#xff0c;其养殖过程中需要持续监测多项水质参数并保持稳定环境。传统人工监测方式存在响应滞后、精度不足…...

3D场景重建与实时渲染:XV3DGS-UEPlugin技术指南

3D场景重建与实时渲染&#xff1a;XV3DGS-UEPlugin技术指南 【免费下载链接】XScene-UEPlugin 项目地址: https://gitcode.com/gh_mirrors/xv/XScene-UEPlugin XV3DGS-UEPlugin是由XVERSE Technology Inc.开发的基于Unreal Engine 5的混合编辑插件&#xff0c;提供Gaus…...