Arch Yafu2 安装指南
2024-02-09 17:10:53
YAFU is the result of an ongoing hobby project to understand how to factor
large integers, and how to factor them fast.
参考: How I install YAFU version 2 onto my Ubuntu Machines by EdH
Yafu2 官方 thread: YAFU 2.0
0. 前置依赖
先准备一个空文件夹, 为了方便依赖和yafu2本体装在一个文件夹下
0.1 GMP
- 找到 https://gmplib.org/download/gmp 下最新版本并下载(比如我现在是
v6.2.1
) - 解压改名
./configure
和make
1 | wget https://gmplib.org/download/gmp/gmp-6.2.1.tar.bz2 |
0.2 GMP-ECM
- 找到 https://gitlab.inria.fr/zimmerma/ecm/-/releases 的最新 release (现在是
v7.0.5
) 然后复制他的下载链接(ecm-x.y.z.tar.gz
)并下载 - 解压改名
configure
和make
1 | wget https://gitlab.inria.fr/zimmerma/ecm/uploads/89f6f0d65d3e980cef33dc922004e4b2/ecm-7.0.5.tar.gz |
0.3 msieve
- 找到 https://sourceforge.net/projects/msieve/files/msieve 的最新版本 (现在是
v1.53
) 然后下载源码 (msievexyz_src.tar.gz
或者msievexyz.tar.gz
) - 解压改名和
make
1 | wget https://sourceforge.net/projects/msieve/files/msieve/Msieve%20v1.53/msieve153_src.tar.gz/download |
0.4 ytools
- git clone
- 改 Makefile:
CC = gcc-7.3.0
=>CC = gcc
make
1 | git clone [email protected]:bbuhrow/ytools.git # or git clone https://github.com/bbuhrow/ytools |
0.5 ysieve
- git clone
make
1 | git clone [email protected]:bbuhrow/ysieve.git # or git clone https://github.com/bbuhrow/ysieve |
1. 安装 Yafu2
- git clone
git clone [email protected]:bbuhrow/yafu.git
- 修改 Makefile:to
1
2
3
4
5INC += -I../gmp_install/gmp-6.2.0/include
LIBS += -L../gmp_install/gmp-6.2.0/lib
INC += -I../ecm_install/include/
LIBS += -L../ecm_install/lib/1
2
3
4
5INC += -I/usr/local/include/
LIBS += -L/usr/local/include/
#INC += -I../ecm_install/include/
#LIBS += -L../ecm_install/lib/ - 执行
lscpu
主要看核数和那些 cpu flag - 修改
yafu.ini
to1
2
3% threads=1
ggnfs_dir=..\..\ggnfs-bin\x64\
ecm_path=..\..\gmp-ecm\bin\mingw\ecm.exe这里1
2
3threads=<# CPU 数量>
ggnfs_dir=../ggnfs/bin/
ecm_path=/usr/local/bin/ecmggnfs_dir
没装也没问题 - [可选] 可以在下一步的 make 命令加上那些 CPU flag, 比如
make NFS=1 USE_SSE41=1 USEAVX2=1
, 不过这也可能导致问题, 我电脑上就只能编NFS=1
make NFS=1
2 Troubleshooting
2.1 SIQS.c:2448: undefined reference to 'nextRoots_32k_avx2_intrin'
因为没有清理之前不同 flag 编译结果导致的, 在下一次 make
前执行 make clean
+ 那些 flag 就行
2.2 msieve 找不到 gzlib function
具体日志如下:
1 | /usr/bin/ld: ../msieve//libmsieve.a(savefile.o): in function `savefile_open': |
在 yafu 的 Makefile 里面加上 LIBS+= -lc -lz