开源cpu挖矿软件XMRIG编译过程记录

开源cpu挖矿软件XMRIG编译过程记录

前言

先认识一下什么是 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

image.png

执行 pacman -Syu 更新安装包

image.png

依次执行以下命令,安装编译所需的软件包

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 文件

参考文章:https://blog.csdn.net/mscf/article/details/102889135

为什么要静态编译?

因为之前在编译完成后再 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文件到程序根目录下
  • √ 静态链接编译

总结

通过上述过程,熟悉了使用 msys2c++ 程序的手动编译过程,通过本篇笔记总结该过程,后续遇到相关的需求时可以通过查阅该笔记快速进行构建。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://codeyee.com/archives/xmrig-compile.html