前言
先认识一下什么是 xmrig
Xmrig
是国外一款优秀的开源挖矿程序,支持市场上流行的算法,并且对全版本的CPU以及AMD系列的GPU都有着较好的兼容。
XMRig High performance, open source, cross platform RandomX, KawPow, CryptoNight, AstroBWT and Argon2 CPU/GPU miner, with official support for Windows.
项目地址:https://github.com/xmrig/xmrig
需求分析
朋友那边的游戏工作室闲置了几台老电脑,趁着近期行情不错,打算开起来跑点生活费,但是由于这批电脑的系统都是32位的windows,而 xmrig
官方的 releases
没有提供编译后的32位程序,那只能自己动手编译一个了
过程
0x01:安装msys2
msys2下载地址: https://repo.msys2.org/distrib/x86_64/msys2-x86_64-20200720.exe
下载完成后,选择安装路径后一直下一步就可以了,等待相关的依赖包下载完成
具体的安装过程可以参考官方的文档:https://www.msys2.org/
0x02:修改msys源
默认的msys源都是国外的,下载速度会很慢
修改下载源配置,覆盖下面的配置到该文件下
安装路径\msys64\etc\pacman.d\mirrorlist.mingw32
##
## 32-bit Mingw-w64 repository mirrorlist
##
## Primary
## msys2.org
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686
Server = http://repo.msys2.org/mingw/i686
这里只针对
mingw32
的下载源,如果是编译64位的程序,则需要修改mingw64的源配置文件
0x03:安装依赖包
运行32位的 mingw
执行 pacman -Syu
更新安装包
依次执行以下命令,安装编译所需的软件包
pacman -S mingw32/mingw-w64-i686-gcc
pacman -S mingw32/mingw-w64-i686-gdb
pacman -S mingw32/mingw-w64-i686-make
pacman -S mingw32/mingw-w64-i686-cmake
上述的软件包全部安装完成后,执行以下命令,检查是否安装成功
gcc -v
gdb -v
make -v
cmake -version
0x04:执行编译
在源码根目录下找到 CMakeLists.txt
文件,在最后一行增加下面的代码
set(CMAKE_EXE_LINKER_FLAGS "-static-libstdc++ -static-libgcc -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive -Wl,-Bdynamic")
实现将一些依赖库静态编译到同一个exe
文件
为什么要静态编译?
因为之前在编译完成后再 64
位的系统可以正常运行,而放到到 32
位的系统却无法运行,原因是缺少一些运行库,如下图
通过上述的一些配置,实现静态编译得以解决该问题。
进入到 xmrig
的源码目录下,创建一个 build
目录用于存放编译文件
mkdir build
cd build
执行下面的命令,生成预编译的一些配置
cmake .. -G "Unix Makefiles" -DWITH_HWLOC=OFF
执行效果如下图
配置完成后,会在 build
目录下生成一些相关的文件
接下来执行编译命令 make
开始执行编译
编译完成
编译完成后,build
目录下会生成一个编译后的文件 xmrig.exe
,我们测试一下是否能够成功运行
由于我当前的编译环境是 64
位的系统,可以成功运行,我们找一个 32
位的系统再测试一下
如上图所示,32
位的系统也能正常运行。
一些问题
- 编译后32位的环境无法运行
- X 手动复制相关依赖的dll文件到程序根目录下
- √ 静态链接编译
总结
通过上述过程,熟悉了使用 msys2
对 c++
程序的手动编译过程,通过本篇笔记总结该过程,后续遇到相关的需求时可以通过查阅该笔记快速进行构建。