升级GCC
1. 查看版本 gcc -v g++ -v 2. 下载指定版本 进入清华源下载相应版本 wget https://mirror.tuna.tsinghua.edu.cn/gnu/gcc/gcc-14.1.0/gcc-14.1.0.tar.gz 解压文件进入目录,我下载的是gcc-14.1.0,版本因人而异 tar -xf gcc-14.1.0.tar.gz cd gcc-14.1.0 # 下载依赖包 ./contrib/download_prerequisites # 创建一个用于编译GCC的目录: mkdir build && cd build # 配置编译选项: ../configure --prefix=/opt/gcc-14.1.0 --enable-languages=c,c++ --disable-multilib # 开始编译 make -j8 # 最后,安装GCC: sudo make install 3. 设置软链接 查看系统gcc/g++版本 sudo updatedb --prunepaths="/mnt" locate g++|grep ...
使用GitHub
1. SSH配置 请参考使用SSH博客 配置config文件 vim ~/.ssh/config 在里面添加 Host github.com HostName github.com PreferredAuthentications publickey IdentityFile ~/.ssh/xxx # 这里xxx换成你命名的私钥名称 2. 添加SSH key到GitHub 拷贝xxx.pub文件的内容 vim ~/.ssh/xxx.pub 登录GitHub账号,从右上角的设置进入,然后点击菜单栏的 SSH key 进入页面添加 SSH key 3. 设置Git信息 git config --global user.name '你的名字' git config --global user.email '你的邮箱' git config --list可以查看信息
使用SSH
1. SSH基础操作 创建.ssh文件夹 mkdir ~/.ssh 创建本地密钥对 ssh-keygen -t rsa -b 4096 -C "你的邮箱@xxx.com" -f ~/.ssh/xxx 这样就生成了公钥xxx.pub和私钥xxx,公钥可以分发,私钥需要保存好 在~/.ssh添加文件config touch ~/.ssh/config vim ~/.ssh/config 在里面添加 Host 别名 HostName 目标IP地址 User 目标用户名 IdentityFile 私钥的位置(绝对位置) 修改文件权限,SSH严格要求私钥文件必须仅所有者可读,其他用户无权访问 chmod 600 ~/.ssh/xxx # xxx为对应的私钥 chmod 700 ~/.ssh 2. 使用SSH连接远程服务器 远程服务器访问人数较多,所以在本地生成密钥对,将公钥传到服务器上,将私钥保存在本地 2.1 本地生成SSH密钥对 请参考SSH基础操作 2.2 上传公钥到服务器 ssh-copy-id -i ~/.ssh/xxx.pub username@server_ip...
使用WSL
1. 与Windows网络共享 在Windows用户文件夹下新建.wslconfig文件并写入 [experimental] autoMemoryReclaim=gradual # 可以在 gradual 、dropcache 、disabled 之间选择 networkingMode=mirrored dnsTunneling=true firewall=true autoProxy=true sparseVhd=true 2. 排除对Windows中的文件检索 在WSL的/etc/wsl.conf文件中加入如下内容 [interop] appendWindowsPath = false [automount] enabled = false 理论上可以关闭与Windows的交互,但是由于WSL共享了Windows的网络,所以无法真正禁止磁盘挂载。 可以修改updatedb的搜索范围来减小磁盘挂载的影响,编辑 /etc/updatedb.conf的方法并不是对所有发行版全部适用,可以在.zshrc或者.bashrc中加入如下内容 alias updatedb="sudo upd...
在VSCode中使用Clang
优势:代码提示更快;可以进行静态分析 1. 在Ubuntu上安装Clang(推荐14及以上,有类型提示) wget https://apt.llvm.org/llvm.sh chmod u+x llvm.sh sudo ./llvm.sh 14 # 或者使用清华源 # 下载脚本 wget https://mirrors.tuna.tsinghua.edu.cn/llvm-apt/llvm.sh chmod +x llvm.sh sudo ./llvm.sh 14 all -m https://mirrors.tuna.tsinghua.edu.cn/llvm-apt 将clang14和clang++14设为默认版本 sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-14 200 sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-14 200 # 列出已存在的替代项 sudo upda...
C++初始化
1. 列表初始化 初始化列表用{}表示,正常是没有类型的,但是在函数的参数列表中可以用std::initializer_list表示能够接收初始化列表。 std::initializer_list在一下情况会自动构造对象: 用于列表初始化对象,并且构造函数需要能够接受std::initializer_list参数 用于赋值或者函数调用,并且赋值运算符/函数需要能够接受std::initializer_list参数 绑定到auto或者包括在范围 for 循环中 auto p = { 1,2,3 };//能够推导出类型为std::initializer_lis auto p2 { 1,2,3 };//无法推导
C++代码书写规范
变量命名使用下划线命名法,函数命名使用大驼峰命名法,类和结构体使用大驼峰命名法,文件名使用下划线命名法 全局变量和常量使用k+大驼峰命名法,类成员变量可以以下划线作为结尾,结构体成员变量不加下划线 尽量不要使用全局变量,可以将其封装进对象里 ros中回调函数的形参可以使用const name & 修饰 函数声明中const修饰符无意义,只需在函数定义中使用 在成员函数中使用ros中的subscribe需要参考以下格式:省略.subscribe(“话题”, 1, &类::回调函数, this); 模板类的静态成员变量是每个特定实例化类型共享一份,而不是所有实例化类共享同一份。例如MyClass<int>和MyClass<double>的静态成员变量是独立的。
C++引用
1. 左值与右值 1.1 左值 左值是可以取地址的对象,比如变量名和解引用的指针变量。 // 以下的a、p、*p、b都是左值 int a = 3; int* p = &a; *p; const int b = 2; 1.2 右值 右值是不能取地址的对象,比如常量、临时变量、函数返回值、运算符返回值等。 double x = 1.3, y = 3.8; // 以下几个都是常见的右值 10; // 字面常量 x + y; // 表达式返回值 fmin(x, y); // 传值返回函数的返回值 2. 左值引用与右值引用 无论左值引用还是右值引用,都是给对象取别名。 2.1 左值引用 是指对左值的引用,作用是避免对象拷贝。 int& ra = a; 2.2 右值引用 是指对右值的引用,作用是延长对象的生命周期。 int&& rr = 10; 2.3 对比与总结 左值引用可以指向左值,在指向右值时需要const修饰 右值引用可以指向右值,在指向左值时需要std::move() cons...
CLion上使用ROS
1. 启动CLion 在ROS的根目录下(执行catkin_make的目录)执行如下(如果已将该路径添加到.bashrc文件则可跳过) source ./devel/setup.bash 寻找CLion位置 # 使用locate sudo updatedb locate clion.sh # 使用find sudo find / -name "clion.sh" 打开CLion(sh后面的路径因人而异) sh /home/robot/.local/share/JetBrains/Toolbox/apps/clion-nova/bin/clion.sh 2. CLion 中打开一个 ROS 项目 一定要选择工作区的src目录以从中导入项目 设置build路径 默认情况下,CLion将生成输出放在自动创建的cmake-build-debug或cmake-build-release目录中。对于ROS开发,这意味着将在CLion和运行catkin_make的控制台中使用两种不同的构建。因此需要将CLion构建路径设置为catkin工作区目录 将CMake options(CMake 选...
Docker命令
查看本地镜像 docker images 查看运行容器 docker ps 根据镜像创建容器 docker run --name my_container -dit --network=host my_image:tag /bin/bash --name:加上此参数可指定生成容器的名称,此参数位置在镜像id前 my_container 指定的容器名字 -d:打开后台运行 -i:打开控制台交互(不设置此选项退出容器后docker会自动清理未活动的容器) -t:支持终端登录 --network=host: 指定网络模式为主机网络 my_image:tag 是要使用的镜像名称和标签。不喜欢打这么多字的可以用id代替 /bin/bash 表示要在容器内启动 Bash Shell进行交互 进入容器正在执行的终端 docker attach 容器id # 如果使用exit退出,容器会停止运行 # 想退出容器但不想容器停止,则按住Ctrl+P+Q退出 进入容器并开启一个新的终端 docker exec -it 容器id /bin/bash # 如果使用exit退出,容器也不会停止 Dock...