一、环境/库

1.1 curl: error while loading shared libraries

  1. 在机器上查找丢失的共享库
1
find ~ -name libssl.so.1.0.0

得到返回值/home/huffie/anaconda3/pkgs/openssl-1.0.2p-h14c3975_0/lib/libssl.so.1.0.0

  1. 查看软件安装路径
1
which curl

得到返回值~/anaconda3/bin/curl,说明是使用anaconda安装的

  1. 建立软连接
1
ln -s /home/huffie/anaconda3/pkgs/openssl-1.0.2p-h14c3975_0/lib/libssl.so.1.0.0 ~/anaconda3/lib/libssl.so.1.0.0
  1. 同样的方法补全libcrypto.so.1.0.0
1
ln -s /home/huffie/anaconda3/pkgs/openssl-1.0.2p-h14c3975_0/lib/libcrypto.so.1.0.0 ~/anaconda3/lib/libcrypto.so.1.0.0

1.2 调整Docker下载速度

  1. 备份配置文件
1
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.backup
  1. 打开配置文件,删除所有内容,并添加以下内容
1
sudo vim /etc/docker/daemon.json
1
2
3
{
"registry-mirrors" : ["https://docker.mirrors.ustc.edu.cn"]
}

1.3 由于没有公钥,无法验证下列签名:NO_PUBKEY的解决方法

(1)问题描述

今天运行apt-get update时突然出现了由于没有公钥,无法验证下列签名的问题,尝试了网上许多方法,最终找到了一种亲测有效的解决方法:

(2)解决方法

在终端输入:

1
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 76F1A20FF987672F

其中最后的代码为报错语句中的最后一部分:由于没有公钥,无法验证下列签名: NO_PUBKEY 76F1A20FF987672F

(3)解决结果

1
2
3
4
5
Executing: /tmp/apt-key-gpghome.uBwlOPqFFF/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv 76F1A20FF987672F
gpg: key 76F1A20FF987672F: 1 signature not checked due to a missing key
gpg: 密钥 76F1A20FF987672F:公钥“WineHQ packages <[email protected]>”已导入
gpg: 合计被处理的数量:1
gpg: 已导入:1

1.4 Cmake 版本更新

更新cmake

(1)报错信息

1
2
3
4
CMake Error at CMakeLists.txt:15 (cmake_minimum_required):
CMake 3.13 or higher is required. You are running version 3.10.2

-- Configuring incomplete, errors occurred!

(2)解决方法

首先尝试一下

1
2
sudo apt update
sudo apt upgrade

如果还不行,那么就到官网安装新版cmake。

cmake官网的下载页面下载最新的cmake安装包,以cmake-3.25.2.tar.gz为例。

解压安装包

1
tar -zxvf cmake-3.25.2.tar.gz

进入安装包

1
cd cmake-3.25.2

开始安装

1
2
3
4
5
chmod 777 ./configure
./configure
make -j8
sudo make install
sudo update-alternatives --install /usr/bin/cmake cmake /usr/local/bin/cmake 1 --force

(3)解决结果

运行下列命令检查cmake是否正确安装

1
cmake --version

1.5 cudnn问题,apt upgrade出现警告/sbin/ldconfig.real

问题描述:

安装软件,或使用sudo apt upgrade时,命令行出现警告信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
/sbin/ldconfig.real: /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8 is not a symbolic link

/sbin/ldconfig.real: /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_ops_train.so.8 is not a symbolic link

/sbin/ldconfig.real: /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_adv_train.so.8 is not a symbolic link

/sbin/ldconfig.real: /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn.so.8 is not a symbolic link

/sbin/ldconfig.real: /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8 is not a symbolic link

/sbin/ldconfig.real: /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8 is not a symbolic link

/sbin/ldconfig.real: /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8 is not a symbolic link

问题原因:

CUDA和cuDNN库的符号链接失效,重新创建符号链接:

解决方法:

注意按照自己的报错信息修改路径

1
2
3
4
5
6
7
sudo ln -sf /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.9.1 /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_ops_train.so.8
sudo ln -sf /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.9.1 /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
sudo ln -sf /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.9.1 /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_adv_train.so.8
sudo ln -sf /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn.so.8.9.1 /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn.so.8
sudo ln -sf /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.9.1 /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8
sudo ln -sf /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.9.1 /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8
sudo ln -sf /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.9.1 /usr/local/cuda-12.1/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8

1.6 conda环境导致的源码安装包问题

问题描述:

如果在conda环境下从源码编译安装某个包,在cmake阶段,可能会出现下面的问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CMake Warning at cmake/CMakeHelper.cmake:103 (add_executable):
Cannot generate a safe runtime search path for target colmap_main because
files in some directories may conflict with libraries in implicit
directories:

runtime library [libmpfr.so.6] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
/home/mahaofei/anaconda3/lib
runtime library [libgmp.so.10] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
/home/mahaofei/anaconda3/lib
runtime library [liblz4.so.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
/home/mahaofei/anaconda3/lib
runtime library [libsqlite3.so.0] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
/home/mahaofei/anaconda3/lib
runtime library [libgomp.so.1] in /usr/lib/gcc/x86_64-linux-gnu/9 may be hidden by files in:
/home/mahaofei/anaconda3/lib

Some of these libraries may not be found correctly.
Call Stack (most recent call first):
src/colmap/exe/CMakeLists.txt:67 (COLMAP_ADD_EXECUTABLE)

解决方法:

退出conda环境,然后再编译安装。

1
2
3
4
# 临时退出
conda deactivate
# 取消终端自动进入conda
conda config --set auto_activate_base false

1.7 the provided PTX was compiled with an unsupported toolchain

问题描述:

从源码编译安装某些包,完成之后无法使用,例如我的colmap一直报错如下:

1
2
3
4
CuTexImage::BindTexture:        invalid device symbol
FilterH: the provided PTX was compiled with an unsupported toolchain.
E1220 10:33:57.020385 2392647 feature_extraction.cc:276] Failed to extract features.
CuTexImage::BindTexture: the provided PTX was compiled with an unsupported toolchain.

解决方法:

更新显卡驱动,亲测有效。

二、ROS

2.1 使用其它工作空间的包,未加载其它工作空间的source

(1)报错信息

1
Failed to load nodelet '/camera/realsense2_camera` of type `realsense2_camera/RealSenseNodeFactory` to manager `realsense2_camera_manager'

(2)报错原因

原因是找不到realsense2_camera包,在安装D435的包时,以为bashrc文件里已存在要添加的路径故没有执行

(3)解决方法

1
source ~/catkin_ws/devel/setup.bash

或者

1
2
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

2.2 有多个.so文件同时被引用

(1)报错信息

1
symbol lookup error: /home/huffie/catkin_ws/devel/lib//librealsense2_camera.so: undefined symbol: _ZN20ddynamic_reconfigure19DDynamicReconfigureC1ERKN3ros10NodeHandleE

(2)报错原因

系统内librealsense2_camera.so的数量不唯一,在多个路径下都存在此库

(3)解决方法

查找一下动态库路径

1
echo $LD_LIBRARY_PATH

将显示的其它工作空间的build和devel文件夹都删掉就可以了

2.3 PCL要求C++11及以上

(1)报错信息

1
error: #error PCL requires C++14 or above

(2)报错原因

CMakeLists.txt没有添加C++14的配置

(3)解决方法

CMakeLists.txt中添加下面这几行代码

1
2
3
add_compile_options(-std=c++11 )
add_compile_options(-std=c++14 )
set(CMAKE_CXX_STANDARD 14)

2.4 error while loading shared libraries

(1)报错信息

1
2
3
/opt/ros/noetic/lib/rosout/rosout: error while loading shared libraries: libxmlrpcpp.so: cannot open shared object file: No such file or directory
[rosout-1] process has died [pid 82803, exit code 127, cmd /opt/ros/noetic/lib/rosout/rosout __name:=rosout __log:=/home/huffie/.ros/log/834eb474-ba51-11ed-861b-470c5d943dac/rosout-1.log].
log file: /home/huffie/.ros/log/834eb474-ba51-11ed-861b-470c5d943dac/rosout-1*.log

(2)问题原因

链接器找不到库文件,搜索libxmlrpcpp.so,发现其位置为/opt/ros/noetic/lib

(3)解决方法

1
sudo gedit /etc/ld.so.conf.d/libc.conf

在其中添加libxmlrpcpp.so的目录

1
/opt/ros/noetic/lib

然后执行

1
sudo ldconfig

就ok了

三、系统问题

3.1 Windows+Ubuntu双系统,Win更新后Ubuntu引导项消失

首先在BIOS里确定Ubuntu的启动顺序是不是在Windows之前,一定要启动ubuntu,然后才有引导

插入ubuntu启动盘,重启电脑,选择U盘启动,进入后选择 try ubuntu without install

进入界面后连接网络

输入以下命令

1
2
3
sudo apt-add-repository ppa:yannubuntu/boot-repair
sudo apt-get update
sudo apt-get install boot-repair

安装成功后继续在终端输入以下命令:

1
boot-repair

期间会检索引导项,等待即可

完成后点击Recommended repair

等待一下,成功找回

3.2 Ubuntu启动后左上角光标闪烁,且出现snd_hda_intel cannot probe codecs的错误信息

问题描述:

系统运行正常的情况下,重启了服务器,再开机就进入不了桌面了,一直左上角光标闪烁,并且等待一段时间后出现snd_hda_intel cannot probe codecs的报错。

解决方法:

清空回收站,本人遇到的问题是磁盘没有空间了,无法启动某个驱动,通过ssh连接系统后使用下面命令清空回收站即可

1
sudo rm -rf ~/.local/share/Trash/*

3.3 Kernel panic - not syncing: Attempted to kill init!

问题描述:

我在正常使用电脑时,突然所有图标全都变成空白方框(左侧 dock 栏、右上角所有系统图标),系统完全卡死,所有软件包括命令行无法打开,设置无法打开,点击重启无效。

强制重启后,ubuntu 无法进入,显示许多行代码,最后一行为 Kernel panic - not syncing: Attempted to kill init!,此时双系统的 Win11 仍然正常。

解决方法:

经查阅资料,应该是系统自动更新内核导致的问题(也有的说是因为/boot 分区满了出现问题)。

开机后在引导界面选择 Advance option for ubuntu,前两个为最新版本的内核,不要选择这两个,选择第三个,进入旧版本的内核。

检查 /boot 分区是否占用为 100%

1
df

查看所有已安装内核

1
dpkg --get-selections| grep linux

查看当前正在使用的内核

1
uname -a

删除最新的(有错误的/如果 boot 满了则删过老的)内核,我这里新内核版本相关的只有这两个包,请根据自己情况调整。==注意一定不要误删==

1
sudo apt-get remove --purge linux-modules-5.15.0-88-generic linux-image-5.15.0-88-generic

完成后清理

1
2
sudo dpkg -P linux-modules-5.15.0-88-generic
sudo dpkg -P linux-image-5.15.0-88-generic

3.4 惠普暗影精灵9/光影精灵9,无法拓展显示器

问题描述

惠普暗影精灵9/光影精灵9,安装ubuntu20.04,已经正常安装显卡驱动,nvidia-smi输出正常,但是外接显示器不识别。

输入xrandr发现只有笔记本显示器。

打开nvidia控制面板,发现nvidia识别到了外接显示器。

尝试了切换显卡驱动无效,关闭secure boot无效。

解决方法

进入BIOS,在配置中,将独显直连(NVIDIA ... Advance,具体是什么记不清了),改为混合模式(Discrete),然后就可以了。

3.5 系统启动后进入(initramfs)

问题描述:

我在 ubuntu+win 双系统中,使用 windows 访问了 ubuntu 的文件,再次启动 ubuntu 后发现出现错误,开机后进入了命令行界面,显示如下内容:

1
2
3
4
BusyBox v1.30.1 (Ubuntu 1:1.30.1-4ubuntu6.1) built-in shell (ash) 
Enter 'help' for a list of built-in commands.

(initramfs)

解决方法:

参考 How To Fix Busybox Initramfs Error On Ubuntu

使用 fsck 命令修复损坏分区中的文件系统:

(可以使用 cat /proc/partitions 或 blkid 或 lsblk 命令在 Busybox 中获取您的 Linux 分区详细信息。)

1
2
3
4
# 如果是机械硬盘,则为sdax,例如
fsck /dev/sda1 -y
# 如果是固态硬盘,则为nvmexnxpx
fsck 则为nvme1n1p2 -y

几分钟后,你会看到如下输出,说明修复完成:

1
2
/dev/sda1: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda1: 497733/30531584 files (1.5% non-contiguous), ........

然后重启系统(如果 reboot 无效,输入 exit 后回车重启)

1
reboot

3.6 A stop job is running for session X of user XXX

问题描述

Ubuntu 在关机或重启时,速度非常慢,在关机界面中按下任意按键会看到 A stop job is running for session 2 of user mahaofei 的提示。

解决方法

编辑文件

1
sudo nano /etc/systemd/system.conf

DefaultTimeoutStopSec 行取消注释,并将时间修改为想要的时间,例如 5s。

1
DefaultTimeoutStopSec=5s

重新加载配置文件

1
sudo systemctl daemon-reload

四、小工具

4.1 解压当前目录下所有 zip 压缩包到 zip 文件同名目录

直接使用 unzip 会讲 zip 中的内容解压到当前目录下,使用以下脚本则会将当前目录下的所有 zip 压缩包解压成对应文件夹

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash

# Loop through all .zip files in the current directory
for zipfile in *.zip; do
# Check if there are no zip files
if [ "$zipfile" == "*.zip" ]; then
echo "No zip files found."
exit 1
fi

# Get the base name of the file (without extension)
foldername="${zipfile%.*}"

# Create the folder (if it doesn't exist) and unzip into it
mkdir -p "$foldername"
unzip "$zipfile" -d "$foldername"
done

echo "All zip files have been extracted."