这里收录了一些遇到的技术问题,以及对应的(在网络上搜索到的)解决方案。为了避免以后再次遇到同样问题的时候需要又经历一遍在互联网上挣扎的过程,这里就集中收录一下。

gdb中输出 vector类对象的方法

p *(variable._M_impl._M_start)@N

此命令将输出 variable 的前 N 个成员。

安装所有fftw3的库

在安装fftw3的过程中,如果直接使用如下命令:

./configure --prefix=/install/location
make
make install

会发现只安装了 libfftw3.a 一个库。有时不会出现问题,但也往往会遇到要用上其他fftw库的情况,例如多线程的库libfftw3_threads.a。如果没有安装的话,会报错:

ld: cannot find -lfftw3_threads

网络上查找到的解决办法是:

./configure --enable-threads --enable-shared --prefix=/install/location
make
make install
./configure --enable-threads --enable-float --prefix=/install/location
make
make install
./configure --enable-threads --enable-long-double --prefix=/install/location
make
make install

可以看出,以上三组命令将分别安装多线程、floatlong double的库。如果确定不需要使用所有的库的话,也可以只运行其中一组或几组。

mpi报错的问题

这几日不知为何mpi无法运行,使用 openmpi 提示节点间通信有问题,甚至之前能成功运行的计算现在也无法运行了。解决方法是切换到了台里服务器自带的 intel mpi,并添加环境变量:

export I_MPI_COMPATIBILITY=4

不添加的话会报错:

Fatal error in PMPI_Allgatherv: Invalid buffer pointer, error stack:
PMPI_Allgatherv(1452): MPI_Allgatherv(sbuf=0x2afe3146ec48, scount=1560, MPI_BYTE, rbuf=0x2afe2b1a6520, rcounts=0x2afe32879620, displs=0x2afe3287a620, MPI_BYTE, MPI_COMM_WORLD) failed
PMPI_Allgatherv(1379): Buffers must not be aliased

统计文件夹下文件数量

ls -l | grep "^-" | wc -l

删除指定时间前的文件

find ./ -mtime +n -name "*" -exec rm {} \;

此命令将删除n天前的文件。

WSL2迁移/备份与还原

由于(时常的)重装系统,因此在这里将常规命令下来备查。

首先,是WSL2的备份。笔者使用的子系统名称是Ubuntu20.04,因此这里输入:

wsl --export Ubuntu20.04 location/dir/backup.vhdx --vhd

一般来说使用.tar文件就可以,即备份文件后缀为.tar且不使用--vhd选项;但笔者倾向于用虚拟硬盘备份,这样万一恢复失败(大概率不太可能)也能直接挂载硬盘读取需要的内容,而.tar文件要先解开,这对笔者的硬盘来说有点吃不消。

然后,备份好windows用户目录下的.wslconfig文件,即$userprofile$/.wslconfig。没有这个文件就可以跳过这一步。

之后,重装(重置)系统。系统重装完成后,安装WSL2但不安装分发版:

wsl --install --no-distribution

再将备份文件导入:

wsl --import Ubuntu20.04 install/location location/backup.vhdx --version 2 --vhd

最后将.wslconfig文件放回用户目录。

启动WSL时可能会发现不是原来的用户登录/家目录不对。可以选择用以下命令启动:

wsl -d Ubuntu20.04 -u username --cd ~

但或许更好的方式是编辑(子系统中)/etc/wsl.conf文件,添加(修改)如下内容:

[user]
default=username

使WSL默认为这个用户。同时编辑Windows Terminal对应的WSL的profile文件(可以直接在GUI界面改,也可以编辑json文件,这里方便起见直接记录json文件的内容):

{
                "commandline": "wsl -d Ubuntu20.04",
                "guid": "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}",
                "hidden": false,
                "name": "Ubuntu20.04",
                "startingDirectory": "$HOME"
            }

添加(修改)最后一个字段并将$HOME改为对应的家目录即可。

VSCODE调试时qt报错

在使用 vscode Python 文件进行调试时,发现出现如下报错并且调试立即退出:

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was
found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Availble platform plugins are: eglfs, minial, minialegl, offscreen, vnc, webgl, xcb.

处理方案是,在对应的终端内导入环境变量打开Qt的debug输出:export QT_DEBUG_PLUGINS=1,然后提示缺少什么库就安装什么库即可。