Ubuntu 编译指定版本的 OpenSSL 库

重命名原有的 openssl 可执行文件 mv -f /usr/bin/openssl /usr/bin/openssl.old 下载所需版本的 openssl wget http://www.openssl.org/source/openssl-1.0.0s.tar.gz 解压并编译 tar zxvf openssl-1.0.0s.tar.gz cd openssl-1.0.0s ./config shared --prefix=/usr/local/openssl1.0 make && make install 生成的可执行文件在 /usr/local/openssl1.0/bin 目录下 生成的动态链接库在 /usr/local/openssl1.0/lib 目录下 在 /usr/bin 目录下创建可执行文件的软连接 在 /usr/lib/x86_64-linux-gnu/ 目录下创建动态链接库的软连接 参考: OpenSSL Old Releases Linux openssl 升级、降级 openssl动态库生成以及交叉编译

November 2, 2023 · 1 min · Rick Cui

Docker Ubuntu 16.04 Sonnar

一、安装 Docker Desktop 下载 Dockers Desktop 二、下载并运行 Ubuntu 镜像 创建容器并运行(Ubuntu 版本 16.04),如果本地没有相应版本的镜像,则会自动下载 docker run -it --name ubuntu16.04_sonar -v /D/Work/sonar:/data ubuntu:16.04 运行已安装的容器 docker start -i ubuntu16.04_sonar 三、配置 Ubuntu 环境 apt update && apt upgrade apt-get install build-essential apt install software-properties-common apt install vim 指定编码:C.UTF-8 locale locale -a cd ~ && vim .bashrc export LANG=C.UTF-8 source .bashrc 安装 python 2.7 pip2 python -V apt install python (python2) apt install python-pip 安装 python3...

October 30, 2023 · 1 min · Rick Cui

Android Studio Build 窗口中文乱码

中文乱码 Android Studio Version 4.2.1 打开 Android studio 全局搜索 双击 shift 搜索 Edit Custom VM Options,双击第一个 打开或者生成文件 studio64.exe.vmoptions 在文件后面添加 -Dfile.encoding=UTF-8 (要注意不能有空格,否则 studio 可能打不开) 直接保存,重启 Android Studio 参考: Android Studio Build窗口出现中文乱码问题

October 30, 2023 · 1 min · Rick Cui

C++——打印枚举常量字符串

#include <stdio.h>#define MY_INT 7777 #define STR(R) #R #define STR2(R) STR(R) enum MyType{ MyType_NULL, MyType_One, MyType_Two }; int main() { printf("%s\n", STR(MyType_One)); printf("%s\n", STR(HELLO_WORLD)); printf("%s\n", STR(MY_INT)); printf("%s\n", STR2(MY_INT)); const int arr[] = {1,2,3}; arr[1] = 4; // error: assignment of read-only location ‘arr[1]’ return 0; } 输出: MyType_One HELLO_WORLD MY_INT 7777 参考: c++中#与##的作用

April 12, 2023 · 1 min · Rick Cui

C++——malloc、calloc、realloc、指针杂记

void printArr(int *A, int size){ printf("Elements of array: "); for(int i = 0; i < size; ++i){ printf("%d\t", A[i]); } printf("\n"); } int main() { int C[3][2][2] = {{{1,2},{3,4}},{{5,6},{7,8}},{{9,10},{11,12}}}; // 虽然地址相同,但代表的意义却不相同 printf("%p\t%p\t%p\t%p\t%p\t%p \n", C, *C, C[0], C[0][0], &C[0][0], &C[0][0][0]); printf("%p\t%p\t%p\n", *C+1, C[0]+1, C[0][1]); printf("%p\t%p\n", C, C[0][0] + 1); printf("%p\t%p\n", C, &C[0][0] + 1); // 分配空间,但不会对元素进行初始化 int *A = (int*)malloc(3 * sizeof(int)); for(int i = 0; i < 3; ++i){ A[i] = i+1; } printArr(A, 3); // 分配空间,并将元素初始化为0 int *B = (int*)calloc(3, sizeof(int)); printArr(B, 3); // 重新分配一块空间(新空间可大可小) // 并把原来的数据拷贝过来 // 如果新空间首地址与原来空间地址不同,会将原来的内存空间释放 // ,注意:此时不能再继续访问原来的地址,虽然原来的指针并未置空 int *D = (int*)realloc(A, 10 * sizeof(int)); printf("%p\t%p\n", A, D); printArr(A, 3); // 此时不能访问 A 了,这是危险的行为 printArr(D, 10); // 等同于重新分配了空间 D = (int*)realloc(NULL, 3 * sizeof(int)); // int *D = (int*)malloc(3 * sizeof(int)); printf("%p\t%p\n", A, D); printArr(D, 3); // 等同于释放了内存空间并将指针置为空值 D = (int*)realloc(D, 0); // free(D);D = nullptr; printf("%p\n", D); return 0; } 输出:...

October 2, 2022 · 1 min · Rick Cui