解决QDebug打印中文乱码问题
在使用 Qt 开发时,qDebug 打印包含中文的 QString 可能会出现乱码。这通常是由于字符编码不一致导致的。
1 |
|
在使用 Qt 开发时,qDebug 打印包含中文的 QString 可能会出现乱码。这通常是由于字符编码不一致导致的。
1 | #include <QDebug> |
1 | sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' |
1 | sudo apt update |
完整桌面版 (推荐,包含 GUI 工具、仿真器和常用库):
1 | sudo apt install ros-melodic-desktop-full |
其他可选版本:
1 | sudo apt install ros-melodic-desktop # 基础桌面版(无仿真器) |
1 | sudo rosdep init |
1 | echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc |
1 | sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential |
1 | mkdir -p ~/catkin_ws/src |
打开新终端,运行:
1 | roscore |
如果看到类似以下输出,说明安装成功:
1 | ... logging to /home/username/.ros/log/xxx/roslaunch-hostname-xxx.log |
如果 apt-key adv
失败,可以手动下载并添加:
1 | curl -sSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add - |
如果下载速度慢,可以替换为国内镜像源(如清华源):
1 | sudo sh -c '. /etc/lsb-release && echo "deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list' |
确保系统中已安装 Python 2.7:
1 | python --version # 应显示 Python 2.7.x |
安装完成后,可以使用以下命令测试 ROS 功能:
roscore
- 启动 ROS masterrosrun roscpp_tutorials talker
- 运行发布者节点rosrun roscpp_tutorials listener
- 运行订阅者节点LIO-SAM (Lidar Inertial Odometry and Mapping) 是一个紧耦合的激光雷达惯性里程计框架,集成了 IMU 预积分和 GPS 数据,适用于机器人建图和定位。
组件 | 版本 | 下载地址 |
---|---|---|
Ubuntu | 18.04+ | - |
ROS | Melodic | - |
gtsam | 4.0.2 | GitHub |
Eigen | 3.3.7 | GitLab |
LIO-SAM | 最新版 | GitHub |
1 | # 更新系统包列表 |
1 | # 下载并解压 Eigen |
1 | # 设置 ROS 软件源(清华镜像) |
1 | # 将 ROS 环境变量添加到 bashrc |
1 | # 克隆 gtsam 仓库 |
1 | # 创建工作空间 |
1 | # 启动 ROS 核心 |
1 | # 检查 LIO-SAM 包是否存在 |
问题:编译时出现 fatal error: Eigen/Dense: No such file or directory
解决方案:
1 | # 确保 Eigen 头文件在正确位置 |
问题:需要特定版本的 gtsam
解决方案:
1 | # 确保使用 gtsam 4.0.2 版本 |
问题:缺少 ROS 包依赖
解决方案:
1 | # 安装所有缺失的依赖 |
1 | # 启动 LIO-SAM 主要节点 |
1 | # 播放 bag 文件 |
1 | ~/catkin_ws/ |
config/params.yaml
建议准备一个干净、换好源的 Ubuntu 16.04 及以上版本(建议 清华源 ),本教程也适用其他 ROS1版本。
查看ubuntu 版本
1 | lsb_release -a |
根据自己的 Ubuntu 的版本选择 ROS 版本 (示例是 Ubuntu 18.04 所以对应ROS版本为 melodic)
![[Ubuntu部署ROS/IMG-20250829234441526.png]]
1 | sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list' |
1 | sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 |
1 | sudo apt update |
1 | echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc |
在使用许多 ROS 工具之前,需要初始化 rosdep
,有些功能包源码编译需要rosdep
来安装这些系统依赖项,不配置也不影响ros使用,所以后面需要时再来配置也可以。 rosdep 请求的文件都放在 github 上的, 推荐使用代理。
1 |
|
1 | roscore |
参考
官方文档(melodic)
ubuntu18.04安装ROS Melodic(最详细配置)-CSDN博客
基于Ubuntu18.04的ROS Melodic环境详细配置(含各种大坑及填坑)
[ROS 系列学习教程] ROS与操作系统版本对应关系_ros版本-CSDN博客
在k3s.service中添加启动参数
1 | --advertise-address=<192.168.x.x> |
查看当前Context
1 | kubectl config current-context |
查看context列表
1 | kubectl config get-contexts |
输出中带有*的Context
表示当前活动的Context
切换到指定Context
1 | kubectl config use-context <context_name> |
在指定Context中执行命令,一般用于临时使用
1 | kubectl --context=<context_name> <exec_cmd> |
在 Kubernetes 环境中,使用 kubectl 管理多个集群非常常见。通过配置 kubeconfig 文件,可以轻松切换和管理多个集群。以下是实现方法的详细步骤。
方法 1: 合并多个配置文件
准备配置文件 假设已有两个集群的配置文件:_/.kube/config1_ 和 _/.kube/config2_。
合并配置文件 使用以下命令将多个配置文件合并为一个:
KUBECONFIG=/.kube/config1:/.kube/config2 kubectl config view –merge –flatten > ~/.kube/config
kubectl config view
方法 2: 配置环境变量
export KUBECONFIG=/.kube/config:/.kube/test-config
kubectl config get-contexts
方法 3: 手动编辑配置文件
打开配置文件 编辑 ~/.kube/config 文件,将其他集群的 cluster_、_context 和 user 信息粘贴到现有配置中。
格式示例:
1 |
|
切换集群上下文
查看当前上下文:
1 | kubectl config current-context |
切换到其他上下文:
1 |
|
最佳实践
使用合并或环境变量的方法更高效,避免手动编辑出错。
定期备份 kubeconfig 文件,防止误操作导致数据丢失。
确保每个集群的访问凭证和权限正确无误。
通过以上方法,您可以轻松管理多个 Kubernetes 集群,提高运维效率。
大家好!在 云原生 的世界里,和 Kubernetes 打交道是家常便饭。如果我们像我一样,需要同时管理多个 Kubernetes 集群——比如一个用于严谨发布的 生产环境 ,一个用于大胆实验的 测试环境 ,甚至还有本地开发环境——那么高效、安全地在它们之间切换就成了必备技能。
很多朋友(包括我自己有时也会!)可能会因为一段时间没用而忘记 kubectl
中那些用于切换配置的命令。别担心,这很正常!今天,我们就来系统地回顾一下 kubectl
配置管理的核心概念—— 上下文(Context) ,以及如何利用它在不同集群间自如切换。
kubectl
的所有配置信息都存储在一个或多个 YAML 文件中,默认情况下是 $HOME/.kube/config
。这个文件我们通常称为 kubeconfig
文件。把它想象成我们的 Kubernetes “护照”,里面记录了我们能访问哪些集群,用什么身份访问。
一个 kubeconfig
文件通常包含三个主要部分:
关键点: 我们可以通过切换 Context 来改变 kubectl
当前操作的目标集群和使用的身份。
kubectl
提供了一套 config
子命令来帮助我们查看和管理 kubeconfig
文件。以下是几个最核心、最常用的命令:
这个命令会显示我们当前的 kubeconfig
文件内容(或者合并后的内容,如果我们配置了多个文件)。它会隐藏敏感信息(如证书和 Token 的具体内容),非常适合快速检查配置概览。
1 | kubectl config view |
如果我们想看某个特定 Context 的详细信息,可以加上 --context
参数:
1 | # 查看名为 'prod-cluster' 的 context 细节 |
这是 最常用 的命令之一,它会列出我们在 kubeconfig
文件中定义的所有 Context。当前正在使用的 Context 会在名称前用星号 *
标记。
1 | kubectl config get-contexts |
从上面的输出可以清晰地看到:
test-cluster
。prod-cluster
和 docker-desktop
的 Context 可供切换。如果我们只想快速确认当前 kubectl
命令会作用于哪个 Context(哪个集群),这个命令最直接:
1 | kubectl config current-context |
这绝对是 核心中的核心 !当我们需要将 kubectl
的操作目标从一个集群切换到另一个集群时,就使用这个命令。
假设我们想从当前的 test-cluster
切换到 prod-cluster
:
1 | kubectl config use-context prod-cluster |
切换成功后,我们可以再次使用 kubectl config current-context
或 kubectl config get-contexts
来验证当前上下文是否已更改。
1 | kubectl config current-context |
现在,所有后续的 kubectl
命令(如 kubectl get pods
, kubectl apply -f ...
等)都会默认发送到 prod-cluster
所定义的集群,并使用 user-prod
的身份进行认证。
假设我们的 kubeconfig
文件中已经配置好了代表生产环境和 测试环境 的 Context,可能分别命名为 production
和 testing
。
我们的日常操作流程可能是这样的:
1 | kubectl config current-context |
1 | kubectl config get-contexts |
1 | kubectl config use-context testing |
1 | kubectl config use-context production |
1 | kubectl config use-context testing |
gke-prod-eu
, eks-dev-us
, local-minikube
等。避免使用模糊不清的名字。kubectl
设置别名,比如 alias k=kubectl
。这样我们的命令可以更短: k config get-contexts
, k config use-context my-context
。kubectx
(用于切换 Context)kubens
(用于切换 Namespace)kubeconfig
文件的安全性 : kubeconfig
文件包含了访问集群的凭证,务必妥善保管,不要泄露给未授权的人员。管理多个 Kubernetes 集群配置并不复杂,核心就在于理解和运用 kubeconfig
文件中的 Context 概念。通过掌握 kubectl config
的几个关键子命令:
view
: 查看配置概览get-contexts
: 列出所有可用上下文current-context
: 显示当前激活的上下文use-context <context-name>
: 切换到指定的上下文我们就能轻松地在不同的 Kubernetes 环境(如生产和测试)之间安全、高效地切换了。希望这篇回顾能帮我们重新找回操作 kubectl
多集群配置的熟悉感!
一、先来看一篇转载文章《在 VS2015 中使用 Qt4》
http://tangzx.qiniudn.com/post-0111-qt4-vs2015.html 最早的原文,看不到了
https://github.com/district10/qt4-vs2015x64 原作者的github,里面的东东都下载不了了
二、firecat本人的教程
0、Qt官方
Qt4.8.7官方源码下载
https://download.qt.io/new_archive/qt/4.8/4.8.7/
官网的exe只提供了MSVC2010,没有更高版本的。高版本需要自己下载源码编译。
源码里面的配置文件已经提供了MSVC 2015的编译选项,\qt-everywhere-opensource-src-4.8.7\mkspecs\win32-msvc2015
参照官方提供的编译文档一步一步执行即可;但是配置文件里没有提供MSVC 2017的编译选项。
官方编译的文档
https://doc.qt.io/archives/qt-4.8/installation.html
https://doc.qt.io/archives/qt-4.8/configure-options.html
https://doc.qt.io/archives/qt-4.8/install-win.html
https://doc.qt.io/archives/qt-4.8/install-mac.html
https://doc.qt.io/qt-5/build-sources.html
1、Qt 4.8.7+MSVC 2017
推荐使用第三方提供的源码,它已经是修改好的,里面含有MSVC 2017编译选项,可以编译。
https://github.com/scharsig/Qt Qt4.8.7+MSVC2017源码
https://forum.qt.io/topic/91623/building-qt-4-8-7-with-visual-studio-2017 Qt4.8.7+MSVC2017论坛
https://github.com/sandym/qt-patches 仅供参考,编译补丁
https://github.com/Homebrew/formula-patches/tree/master/qt 仅供参考,编译补丁
https://github.com/BartVandewoestyne/qt_4_8_7_with_vs2017_patch 仅供参考,编译补丁
完整的编译过程:
下载第三方源码https://github.com/scharsig/Qt/tree/master/qt-4.8.7-vs2017 然后解压
-–step1—
Windows桌面-开始-程序-Visual Studio 2017-Visual Studio Tools-VC-x86 Native Tools Command Prompt for VS 2017
-–step2—
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise>cd F:\Qt\setup-exe\4.8.7\Qt-master\qt-4.8.7-vs2017
-–step3—
F:\Qt\setup-exe\4.8.7\Qt-master\qt-4.8.7-vs2017>configure -help
-–step4—
F:\Qt\setup-exe\4.8.7\Qt-master\qt-4.8.7-vs2017>
configure -make nmake -debug-and-release -opensource -confirm-license -platform win32-msvc2017 -prefix F:\Qt\Qt4.8.7-msvc2017 -nomake examples -nomake tests
如果不想编译这么多功能模块,可以精简为:
configure -make nmake -debug-and-release -opensource -confirm-license -platform win32-msvc2017 -prefix F:\Qt\Qt4.8.7-msvc2017 \
-no-qt3support -no-multimedia \
-no-audio-backend -no-phonon -no-phonon-backend -no-libtiff \
-no-libmng -no-dbus -no-nis -nomake examples -nomake tests
-release Compile and link Qt with debugging turned off. -debug Compile and link Qt with debugging turned on. -nomake tests Disable building of tests to speed up compilation -nomake examples Disable building of examples to speed up compilation -confirm-license Automatically acknowledge the LGPL 2.1 license.
-–step5—
F:\Qt\setup-exe\4.8.7\Qt-master\qt-4.8.7-vs2017>nmake
-–step6—
F:\Qt\setup-exe\4.8.7\Qt-master\qt-4.8.7-vs2017>nmake install
-–step7—
添加到Qt Creator
![[编译Qt 4.8.7源码/IMG-20250807081809727.png]]
-–step8—
新建项目测试,Qt Creator+Qt4.8.7+MSVC2017编译项目时,如果报错:
intermediate\moc\moc_rs_actionzoompan.cpp:-1: error: C1041: 无法打开程序数据库“F:\CADCAM\QCAD\src\build-LibreCAD-v1.0.4-qt4-Desktop_Qt_4_8_7_MSVC2017_32bit-Debug\librecad\vc140.pdb”;如果要将多个 CL.EXE 写入同一个 .PDB 文件,请使用 /FS
解决办法:
在Qt Creator的项目文件,即.pro文件中,可以通过QMAKE_CXXFLAGS来给MSVC编译器传递编译开关。
QMAKE_CXXFLAGS += /FS
win32-msvc*:QMAKE_CXXFLAGS += /wd"4819" QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO -= -Zc:strictStrings
MSVC 2017编译器常见错误的解决:
2、Mac OS+Qt 4.8.7
笔者的Mac OS版本是MacOS-10.15-Catalina,高版本的OS和Clang已经不再支持Qt官方发布的Qt4了。
解决办法可以参见我的另一篇博文:https://blog.csdn.net/libaineu2004/article/details/104740623
https://trac.macports.org/ticket/58651 mac下编译qt4遇到问题
https://github.com/macports/macports-ports/tree/master/aqua/qt4-mac mac编译补丁
为当前用户设置 HTTP_PROXY 和 HTTPS_PROXY 环境变量,Podman 将自动读取这些环境变量并使用代理。
1 | # Bash |
如果代理需要身份验证,可以在 URL 中添加用户名和密码。格式如下:
1 | http://用户名:密码@代理地址:端口 |
通过编辑 /etc/containers/registries.conf 配置文件为 Podman 服务设置代理。在该文件中添加如下内容:
1 | [registries.search] |
替换 REGISTRY_NAME.HOSTNAME 为您要配置的注册表,如 docker.io。如果代理需要身份验证,则使用类似 http://user:password@proxy.example.com:8080 的格式。
为单个 Podman 命令临时设置代理,方法是在命令前添加 –build-arg 参数。例如:
1 | podman --build-arg HTTP_PROXY="http://代理地址:端口" --build-arg HTTPS_PROXY="https://代理地址:端口" pull nginx |
1 | $ systemctl status podman |
安装依赖环境
1 | # 启用虚拟化平台 |
安装Podman
1 | # 安装DockerCLI,用于兼容Docker命令 |
配置wsl虚拟机
1 | # 修改默认软件源 |
测试
1 | docker run --rm -d -p 80:80 --name httpd docker.io/library/httpd:latest |
配置镜像加速
podman的配置文件在容器内 /etc/containers/registries.conf
,配置格式如下
1 | unqualified-search-regustrues = ["docker.io"] |
配置私有镜像库
1 | [[registry]] |
如果访问地址为https
需要配置信任证书
1 | sudo mkdir /etc/containers/certs.d |
1 | # 有关此配置文件的更多信息,请参阅 containers-registries.conf(5)。 |
- 全称:Société Anonyme(法)/Sociedad Anónima(西)
- 含义:股份有限公司,流行于法国、西班牙等拉丁语系国家
- 示例:L’Oréal S.A.1
地域差异提示: