WSL #
cmd #
wsl -l -v
wsl --shutdown #关闭
wsl --list --verbose # 查看已安装的发行版、WSL 版本信息和当前状态
wsl --set-default <DistroName> # 重新指定默认发行版
wsl --export Ubuntu-22.04 e:\Ubuntu-22.04.tar#导出
wsl --unregister Ubuntu-22.04 #注销并卸载
wsl --import Ubuntu-22.04 E:\ubuntu2204 E:\Ubuntu-22.04.tar#导入
wsl --set-default <DistroName> # 重新指定默认发行版
环境配置 #
- windows 设置打开: 适用于 Linux 的 Windows 子系统 和 虚拟机平台
Linux 内核更新包:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
wsl --list --verbose # 查看已安装的发行版、WSL 版本信息和当前状态 wsl --set-default <DistroName> # 重新指定默认发行版
Windows 11:WSL 2 安装和管理指南,3 种方法任你选 - 系统极客 (sysgeek.cn)
Win11 安装 Docker Desktop 和 WSL2 并进行安装位置迁移_windows 11 wsl 修改安装位置-CSDN 博客
常见问题 #
VmmemWSL 占用 CPU 或内存资源过高 #
Vmmem 进程(WSL)占用 CPU 或内存资源过高的解决办法-CSDN 博客
代理问题 #
WSL2 如何解决 clash 代理问题 - VariantConst
C/C++ #
sudo apt install build-essential
sudo apt -y install gcc g++ gdb
conda #
基本命令 #
conda create --name myenv python=3.8
conda activate myenv
conda deactivate
conda list #命令来查看当前环境中安装的包。
conda env remove --name myenv #删除
conda info --envs #查找所有虚拟环
conda install [package-name] # 安装名为[package-name]的包
conda install [package-name]=X.X # 安装名为[package-name]的包并指定版本X.X
conda update [package-name] # 更新名为[package-name]的包
conda remove [package-name] # 删除名为[package-name]的包
conda list # 列出当前环境下已安装的所有包
conda search [package-name] # 列出名为[package-name]的包在conda源中的所有可用版本
conda create --name [env-name] # 建立名为[env-name]的Conda虚拟环境
conda activate [env-name] # 进入名为[env-name]的Conda虚拟环境
conda deactivate # 退出当前的Conda虚拟环境
conda env remove --name [env-name] # 删除名为[env-name]的Conda虚拟环境
conda env list # 列出所有Conda虚拟环境
环境配置 #
wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.5.2-0-Linux-x86_64.sh
bash Miniconda3-py38_23.5.2-0-Linux-x86_64.sh
安装以后要重启才能生效!
常见问题 #
安装以后要重启才能生效!
pycharm 无法添加 conda 环境时无法找到对应环境的 python.exe 文件
Conda Executable 是 conda 的执行文件,不是填环境的 python 解释器 0.0
看错两次了
cuda 驱动,cuda-toolkit, cudnn #
环境配置 #
Windows 11/10 WSL2 Ubuntu 20.04 下配置 Cuda 及 Pytorch_win11 的 cuda 和 ubuntu 对比-CSDN 博客
安装 WSL Cuda 驱动 #
cudatoolkit #
CUDA Toolkit 12.6 Update 1 Downloads | NVIDIA Developer
cudnn #
cuDNN Archive | NVIDIA Developer
重装 #
CUDA 的正确安装/升级/重装/使用方式 - 知乎 (zhihu.com)
pytorch, dgl, PyG #
conda install pytorch torchvision torchaudio pytorch-cuda=12.4 -c pytorch -c nvidia
conda install -c dglteam/label/th24_cu124 dgl
conda install pyg -c pyg
#test
python -c "import torch; print(torch.cuda.is_available())"
python -c "import torch; print(torch.version.cuda)"
docker #
使用 dockerfile #
dockerfile #
Dockerfile 是一个文本文件,包含一系列指令来组装 [Docker 镜像]( https://so.csdn.net/so/search?q=Docker 镜像&spm=1001.2101.3001.7020)。每个指令执行一个特定动作,例如安装包、复制文件或定义启动命令。
docker pull ubuntu:20.04 #下一个镜像
docker run --rm ubuntu:22.04 nproc#安装,并查看cpu核心数
docker run -it ubuntu:22.04 bash #进入交互模式,这种情况在能用、
docker run -it --name my_centos7 -v /path/on/host:/path/in/container centos:7#如果需要将数据保存到宿主机上,可以挂载一个目录, 同时指定名字, 注意exit退出容器后容器还会存在,使用docker ps -a 才能看到
docker start <container_name> #重新启动暂停的容器
docker exec -it <container_name> bash #重新进入容器
apt install, 注意update
docker ps #查看运行的容器
docker ps -a#查看运行的容器,包括暂停的
#docker下 的gui显示也可以安装通过设置DISPLAY环境变量来处理
docker commit <容器ID或名称> <镜像名称>:<标签> #保存容器为镜像
docker images #查看保存的镜像
docker rm <container_name>#删除容器
docker rmi -f <镜像ID或名称> #删除镜像
docker exec -it my_container bash #对同一个docker容器开启多个终端
docker run -v <主机目录>:<镜像目录> -it <镜像名称>:<标签> bash #挂载
container 内的C++项目debug #
linux下vscode支持的调试器为gdb
安装vs code 插件: Dev Container
安装gdb:
apt-get install build-essential gdb
运行:Attach to Running Container
在vscode中打开工程目录,并添加launch文件
用g++或者用task.json生成binary可执行文件,注意编译的时候加上-g,-g意思就是编译出带调试信息的可执行文件,如果少了这个-g,生成的可执行文件就不能够调试了
然后点三角形就行。
参考 #
- VSCode调试docker中的程序(C++) 和离线安装VSCode插件的方法_vs code docker插件dev container下载-CSDN博客
- launch.json官方教程https://go.microsoft.com/fwlink/?linkid=830387
- launch.json教程 VScode 调试教程 tasks.json和launch.json的设置(超详细)-CSDN博客
centos 容器无法联网问题 #
Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=container error was 14: curl#6 - “Could not resolve host: mirrorlist.centos.org; Unknown error”
#还是不行。。。
修改vscode docker容器内终端没有颜色 #
自定义优化VsCode终端样式(提示高亮)_vscode终端颜色设置-CSDN博客
install #
Ubuntu 安装 Docker_ubuntu 重新安装 docker-CSDN 博客
Cmake #
basic #
基本内置宏变量 #
- PROJECT_SOURCE_DIR 使用cmake命令后紧跟的目录,一般是工程的根目录
- PROJECT_BINARY_DIR 执行cmake命令的目录
- CMAKE_CURRENT_SOURCE_DIR 当前处理的CMakeLists.txt所在的路径
- CMAKE_CURRENT_BINARY_DIR target 编译目录
- EXECUTABLE_OUTPUT_PATH 重新定义目标二进制可执行文件的存放位置
- LIBRARY_OUTPUT_PATH 重新定义目标链接库文件的存放位置
- PROJECT_NAME 返回通过PROJECT指令定义的项目名称
- CMAKE_BINARY_DIR 项目实际构建路径,假设在build目录进行的构建,那么得到的就是这个目录的路径
常用文件结构 #
- inc目录下存放头文件
- src目录下存放源文件
- lib目录下存放生成的库
- bin目录下存放可执行文件
- build目录下存放构建项目相关的文件
command #
include_directories(headpath)
add_executable(app ${SRC_LIST})
案例 #
.
|-- CMakeLists.txt
|-- bin
| `-- binary
|-- build
| |-- CMakeCache.txt
| |-- CMakeFiles
| | |-- 3.27.0
| | |-- CMakeConfigureLog.yaml
| | |-- CMakeDirectoryInformation.cmake
| | |-- CMakeScratch
| | |-- Makefile.cmake
| | |-- Makefile2
| | |-- TargetDirectories.txt
| | |-- binary.dir
| | |-- cmake.check_cache
| | |-- pkgRedirects
| | |-- progress.marks
| | `-- src_dyn_lib_so.dir
| |-- Makefile
| `-- cmake_install.cmake
|-- lib
| |-- libsrc_dyn_lib_so.so
| `-- libsrc_sta_lib_a.a
`-- src
|-- db
| |-- func.cpp
| `-- func.h
|-- main.cpp
|-- network
|-- test
`-- utils
message("run cmake...")
# 设置二进制文件的名称
set(BINARY_NAME "binary")
set(PROJECT_DIR "/root/cmake_test")
set(BIN_DIR "${PROJECT_DIR}/bin")
set(SRC_DIR "${PROJECT_DIR}/src")
set(LIB_DIR "${PROJECT_DIR}/lib")
# set(LIBRARY_OUTPUT_DIRECTORY ${LIB_DIR}) # 动态库(.so) 输出路径
# set(ARCHIVE_OUTPUT_DIRECTORY ${LIB_DIR}) # 静态库(.a) 输出路径
set(EXECUTABLE_OUTPUT_PATH ${BIN_DIR}) #设置可执行文件位置
# 设置CMake的最低版本
cmake_minimum_required(VERSION 3.10)
# 项目名称
project(MyProject)
# 设置C++标准
set(CMAKE_CXX_STANDARD 11)
# 获取所有子目录下的源文件
file(GLOB_RECURSE SOURCES
"${SRC_DIR}/db/*.cpp"
"${SRC_DIR}/network/*.cpp"
"${SRC_DIR}/utils/*.cpp"
)
# 获取所有头文件
file(GLOB_RECURSE HEADERS
"${SRC_DIR}/db/*.h"
"${SRC_DIR}/network/*.h"
"${SRC_DIR}/utils/*.h"
)
#静态库和动态库
# add_library(src_sta_lib_a STATIC ${SOURCES})
add_library(src_dyn_lib_so SHARED ${SOURCES})
# set_target_properties(src_sta_lib_a PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${LIB_DIR})# 静态库(.a) 输出路径
set_target_properties(src_dyn_lib_so PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${LIB_DIR})# 动态库(.so) 输出路径
# link_directories(${LIB_DIR})# 通过命令指定出要链接的动态库的位置,指定静态库位置使用的也是这个命令 #如果该静态库不是系统提供的(自己制作或者使用第三方提供的静态库)可能出现静态库找不到的情况,此时可以将静态库的路径也指定出来
# link_libraries(src_sta_lib_a)# 链接静态库 #用于设置全局链接库,这些库会链接到之后定义的所有目标上 #可以是全名 libxxx.a #也可以是掐头(lib)去尾(.a)之后的名字 xxx
# 创建可执行文件
add_executable(${BINARY_NAME} ${SRC_DIR}/main.cpp ${SOURCES})
#链接动态库
target_link_libraries(${BINARY_NAME} src_dyn_lib_so)#用于指定一个目标(如可执行文件或库)在编译时需要链接哪些库#支持指定库的名称、路径以及链接库的顺序。#动态库的链接具有传递性
# 设置头文件目录
# 必须放到add_executable后面 add
# 指定包含目录,以便编译器在编译源文件时能够找到所需的头文件
target_include_directories(${BINARY_NAME} PRIVATE
${SRC_DIR}/db
${SRC_DIR}/network
${SRC_DIR}/utils
)
set(CMAKE_BUILD_TYPE "Debug")
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O3 -march=native")
message("cmake done...")
动态库和静态库 #
有些时候我们编写的源代码并不需要将他们编译生成可执行程序,而是生成一些静态库或动态库提供给第三方使用,下面来讲解在cmake中生成这两类库文件的方法。
静态库 #
.a
静态库会在生成可执行程序的链接阶段被打包到可执行程序中,所以可执行程序启动,静态库就被加载到内存中了。cmake中指定要链接的动态库的时候,应该将命令写到生成了可执行文件之后
add_library(库名称 STATIC 源文件1 [源文件2] ...)
add_library(calc STATIC ${SRC_LIST})
这样最终就会生成对应的静态库文件libcalc.a。
动态库 #
.so
动态库在生成可执行程序的链接阶段不会被打包到可执行程序中,当可执行程序被启动并且调用了动态库中的函数的时候,动态库才会被加载到内存
add_library(calc SHARED ${SRC_LIST})
这样最终就会生成对应的动态库文件libcalc.so。
动态库的链接具有传递性,如果动态库 A 链接了动态库B、C,动态库D链接了动态库A,此时动态库D相当于也链接了动态库B、C,并可以使用动态库B、C中定义的方法
add_library(库名称 SHARED 源文件1 [源文件2] ...)
target_link_libraries(A B C) target_link_libraries(D A)
场景 #
debug宏定义 #
#include <stdio.h>
#define NUMBER 3
int main()
{
int a = 10;
#ifdef DEBUG
printf("我是一个程序猿, 我不会爬树...\n");
#endif
for(int i=0; i<NUMBER; ++i)
{
printf("hello, GCC!!!\n");
}
return 0;
}
在测试的时候去把它定义出来,其中一种方式就是在gcc/g++命令中去指定,如下: gcc test.c -DDEBUG -o app
在gcc/g++命令中通过参数 -D指定出要定义的宏的名字,这样就相当于在代码中定义了一个宏,其名字为DEBUG。
在CMake中我们也可以做类似的事情,对应的命令叫做add_definitions
add_definitions(-D宏名称)
vscode C++ cmake debug #
目录结构
.
|-- LICENSE
|-- README.md
|-- build
| |-- CMakeCache.txt
| |-- CMakeFiles
| |-- Makefile
| |-- POST9.dat
| |-- POWV9.dat
| |-- cmake_install.cmake
| |-- compile_commands.json
| |-- debug.guide
| `-- iccad19gr
|-- data
|-- drcu
|-- ispd18eval
| |-- README
| |-- ispd18eval.sh
| |-- ispd18eval.tcl
| |-- ispd18eval.w
| `-- ispd18eval_bin
|-- ispd19eval
| |-- README
| |-- ispd19eval.sh
| |-- ispd19eval.tcl
| |-- ispd19eval.w
| `-- ispd19eval_bin
|-- lib
|-- mybenchmarks
| |-- aes_cipher_top
| |-- ispd18_test1
| `-- ispd19_test3
|-- myoutput
| |-- flow.log
| `-- ispd18_test1
|-- rsyn
| |-- LICENSE
| |-- README.md
| |-- include
| |-- lib
| `-- src
|-- run
| |-- POST9.dat
| |-- POWV9.dat
| |-- __pycache__
| |-- build.py
| |-- debug.sh
| |-- drcu
| |-- flow.py
| |-- gprof2dot.py
| |-- iccad19gr
| |-- ispd18eval
| |-- ispd19eval
| |-- lefRWarning.log
| |-- rebuilt.sh
| |-- run.py
| `-- run_base.py
|-- scripts
| |-- build.py
| |-- gprof2dot.py
| |-- run.py
| `-- run_base.py
|-- src
| |-- CMakeLists.txt
| |-- db
| |-- flute
| |-- global.h
| |-- gr_db
| |-- main.cpp
| |-- multi_net
| |-- single_net
| `-- utils
`-- test.sh
#########
# Setup #
#########
# Specify the minimum version for CMake
cmake_minimum_required(VERSION 2.8)
# Message
message(STATUS "ICCAD19 GR CUHK")
message(STATUS ${CMAKE_CURRENT_SOURCE_DIR})
message(STATUS ${PROJECT_SOURCE_DIR})
# Find includes in the build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Project's name
project(iccad19gr)
# Set the output folder where your program will be created
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(CMAKE_CXX_STANDARD 14)
set(PATH_RSYN ${CMAKE_CURRENT_SOURCE_DIR}/../rsyn)
set(PATH_ICCAD19 ${CMAKE_CURRENT_SOURCE_DIR})
###################
# Warnings/Errors #
###################
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=return-type")
######################
# Check Dependencies #
######################
# uncommment this line if you are using self-compiled boost lib
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost COMPONENTS system filesystem program_options REQUIRED)
# find_package(Threads)
###############
# Source Code #
###############
file(GLOB_RECURSE SRC_FILES_RSYN
${PATH_RSYN}/src/*.cpp
${PATH_RSYN}/src/*.cc
${PATH_RSYN}/src/*.c)
file(GLOB_RECURSE SRC_FILES_ICCAD19
${PATH_ICCAD19}/*.cpp
${PATH_ICCAD19}/*.c)
set(SRC_FILES ${SRC_FILES_RSYN} ${SRC_FILES_ICCAD19})
#################
# Library Paths #
#################
# Need to come before target is created.
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
link_directories(${PATH_RSYN}/lib/linux)
endif()
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
link_directories(${PATH_RSYN}/lib/macosx)
endif()
###########
# Targets #
###########
add_executable(iccad19gr ${SRC_FILES})
#######################
# Include Directories #
#######################
include_directories(${PATH_RSYN}/src)
include_directories(${PATH_RSYN}/src/rsyn/export)
include_directories(${PATH_RSYN}/include)
include_directories(${PATH_ICCAD19})
#################
# Linker Flags #
#################
# TODO: set static under release mode only
set_target_properties(iccad19gr PROPERTIES LINK_FLAGS "-static -Wl,--whole-archive -rdynamic -lpthread -Wl,--no-whole-archive")
# LEF/DEF
target_link_libraries(iccad19gr lef)
target_link_libraries(iccad19gr def)
# Boost
target_include_directories(iccad19gr PUBLIC ${Boost_INCLUDE_DIR})
target_link_libraries(iccad19gr ${Boost_LIBRARIES})
#进行debug编译
cmake src/ -B build -DCMAKE_BUILD_TYPE=Debug
测试指令:
cp run/PO* build/. cd build ./iccad19gr -lef ../mybenchmarks/ispd18_test1/ispd18_test1.input.lef -def ../mybenchmarks/ispd18_test1/ispd18_test1.input.def -output debug.guide --thread 8
c_cpp_properties.json
{
"configurations": [
{
"name": "Linux",
"includePath": [
"/root/cu-gr/src/"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-x64",
"configurationProvider": "ms-vscode.cmake-tools"
}
],
"version": 4
}
launch.json
{
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "/root/cu-gr/build/iccad19gr",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
一个相关bug
apt-get install gdb
参考 #
c++程序的 cmake编译+vscode来 debug 方法和步骤(ubuntu)_ubuntu c++ debug-CSDN博客
参考 #
install #
# 以v3.25.1版本为例
git clone -b v3.25.1 https://github.com/Kitware/CMake.git
cd CMake
# 你使用`--prefix`来指定安装路径,或者去掉`--prefix`,安装在默认路径。
./bootstrap --prefix=<安装路径> && make && sudo make install
# 验证
cmake --version
Latex #
latex in vscode #
Hugo #
参考 #
如何用 GitHub Pages + Hugo 搭建个人博客 · KrislinBlog