Macos flatter(用于快速LLL)本地编译安装(解决安装过程各种疑难杂症)

flatter是一个开源项目,能大大提高LLL的速度,项目提供的安装文档适用于Ubuntu,但是在macos上安装,总会遇到各种各样的问题,这里记录下所踩坑,帮助大家快速在macos上安装flatter。


文章目录

  • 1.安装依赖库(特别注意fplll使用5.4.2版本)
  • 2.修改CMakeLists.txt文件
  • 3.编译


各种报错的解决全部掺杂在小步骤里面了,如果按照步骤来,仍有报错,欢迎在评论区讨论。

1.安装依赖库(特别注意fplll使用5.4.2版本)

正确步骤1:clone flatter项目。

git clone https://github.com/keeganryan/flatter.git

正确步骤2:首先安装如下依赖,这里和项目文档有些出入,这些都是踩坑的教训。

brew install gmp mpfr eigen llvm libomp

正确步骤3:安装fplll的5.4.2版本,参考博客:HomeBrew安装历史版本依赖库(formula)-4.0以后版本通用(以brew安装fplll5.4.2为例)

然后fplll不能直接安装,直接安装的话,默认安装的是新版,新版有不兼容问题,在make的时候会报如下错误:

/opt/homebrew/include/fplll/gso.h:233:16: error: 'fplll::MatGSO<fplll::Z_NR<>, fplll::FP_NR<>>::babai' hides overloaded virtual functions [-Werror,-Woverloaded-virtual]void virtual babai(vector<ZT> &w, const vector<FT> &v, int start = 0, int dimension = -1,^
/opt/homebrew/include/fplll/gso_interface.h:466:16: note: hidden overloaded virtual function 'fplll::MatGSOInterface<fplll::Z_NR<>, fplll::FP_NR<>>::babai' declared here: different number of parameters (3 vs 5)void virtual babai(vector<ZT> &v, int start = 0, int dimension = -1);^
/opt/homebrew/include/fplll/gso_interface.h:477:16: note: hidden overloaded virtual function 'fplll::MatGSOInterface<fplll::Z_NR<>, fplll::FP_NR<>>::babai' declared here: different number of parameters (4 vs 5)void virtual babai(vector<ZT> &w, const vector<FT> &v, int start = 0, int dimension = 1);^
2 errors generated.
make[2]: *** [src/CMakeFiles/flatter.dir/problems/lattice_reduction/fplll_impl.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/flatter.dir/all] Error 2
make: *** [all] Error 2

这个错误的解决办法,就是使用低版本的fplll库,这里使用5.4.2,保证不会有问题。

2.修改CMakeLists.txt文件

安装完依赖后,不能直接cmake,这样的话,会遇到如下的报错:

atfwus@***MacBook-Pro build % cmake ..
CMake Error at /opt/homebrew/Cellar/cmake/3.27.7/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES)
Call Stack (most recent call first):/opt/homebrew/Cellar/cmake/3.27.7/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE)/opt/homebrew/Cellar/cmake/3.27.7/share/cmake/Modules/FindOpenMP.cmake:577 (find_package_handle_standard_args)src/CMakeLists.txt:8 (find_package)

正确步骤4:我们需要在CMakeLists.txt文件中显式指定OpenMP路径:

set(OpenMP_CXX_FLAGS "-Xpreprocessor -fopenmp -I/opt/homebrew/opt/libomp/include")
set(OpenMP_CXX_LIB_NAMES "omp")
set(OpenMP_omp_LIBRARY "/opt/homebrew/opt/libomp/lib/libomp.a")
set(OpenMP_CXX_VERSION 3.1)

特别注意这几行添加的位置,是位于flatter-main/CMakeLists.txt中的这个位置,添加错位置了也会出问题:
在这里插入图片描述
正确步骤5:然后还需要指定mpfr和gmp的依赖位置:

include_directories(/opt/homebrew/opt/mpfr/include)
include_directories(/opt/homebrew/opt/gmp/include)
link_directories(/opt/homebrew/opt/mpfr/lib)
link_directories(/opt/homebrew/opt/gmp/lib)

如果这里没指定,那么在make的时候会遇到如下的错误:

[ 98%] Building CXX object apps/CMakeFiles/flatter_bin.dir/flatter.cpp.o
In file included from /Users/atfwus/open_proj/flatter-main/apps/flatter.cpp:2:
In file included from /Users/atfwus/open_proj/flatter-main/./include/flatter/data/matrix.h:1:
/Users/atfwus/open_proj/flatter-main/./include/flatter/data/matrix/matrix.h:3:10: fatal error: 'mpfr.h' file not found
#include <mpfr.h>^~~~~~~~
1 error generated.
make[2]: *** [apps/CMakeFiles/flatter_bin.dir/flatter.cpp.o] Error 1
make[1]: *** [apps/CMakeFiles/flatter_bin.dir/all] Error 2

3.编译

正确步骤6:编译

mkdir build && cd ./build
cmake ..
make
sudo make install
sudo update_dyld_shared_cache

如果上面的步骤都做到了的话,这几步都不会出现问题,如果出现了问题,去上面步骤里面找报错信息。

正确步骤7:设置环境变量DYLD_LIBRARY_PATH
进入lib目录,查看当前路径,例如:/Users/atfwus/open_proj/flatter-main/build/lib

编辑~/.zprofile文件(依据你使用的shell不同而不同,有的是.bashrc),将其添加到末尾:

# flatter DYLD
export DYLD_LIBRARY_PATH=/Users/atfwus/open_proj/flatter-main/build/lib:$DYLD_LIBRARY_PATH
source .zprofile

这样就成功安装flatter了,可以检验是否安装成功:

atfwus@xxxMacBook-Pro build % latticegen q 4 2 10 b | flatter
[[4 -1 1 0]
[2 10 8 2]
[1 4 -5 -13]
[4 4 -12 12]
]

如果第7步出现了问题,那么运行上述命令的时候,会有如下报错:

atfwus@xxxMacBook-Pro ~ % flatter
dyld[91789]: Library not loaded: @rpath/libflatter.dylibReferenced from: <945BAD71-AAEC-35CD-AA40-C43693D76181> /usr/local/bin/flatterReason: no LC_RPATH's found
zsh: abort      flatter

ATFWUS 2024-01-18

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/632806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二级C语言备考10

一、单选 共40题 &#xff08;共计40分&#xff09; 第1题 &#xff08;1.0分&#xff09; 题号:6104 难度:易 第1章 以下叙述正确的是 A:有些算法不能用三种基本结构来表达 B:C语言程序不编译也能直接运行 C:结构化程序的三种基本结构是循环结构、选…

离线安装python2的MySQLdb

离线安装python2的MySQLdb 需求 环境&#xff1a; centos7.9 pytthon2.7.5 安装MySQLdb模块 下载MySQLdb模块地址 直接安装报错如下 [rootlocalhost MySQL-python-1.2.5]# ls doc HISTORY MANIFEST.in _mysql.c _mysql_exceptions.py PKG-INFO README.m…

Python使用HTTP代理进行网络测试和监控

在Python中&#xff0c;HTTP代理不仅可以用于网络爬虫&#xff0c;还可以用于网络测试和监控。通过使用HTTP代理&#xff0c;我们可以模拟不同的网络环境&#xff0c;测试应用程序在不同情况下的性能和稳定性。此外&#xff0c;我们还可以使用HTTP代理来监控网络流量和性能指标…

C语言编译和链接

翻译环境和运行环境 在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境 .第一种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令 .第二种是执行环境&#xff0c;它用于实际执行代码 翻译环境 翻译环境是由编译和链接两个大过程组成&#xff0c;而…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机图像转换为Bitmap图像功能(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机图像转换为Bitmap图像功能&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机NEOAPI SDK实现Bitmap的图像转换功能技术背景Baumer工业相机通过NEOAPI SDK实现Bitmap的图像转换功能1.引用合适的类文件2.通过NEOAPI …

npm run dev 启动vue的时候指定端口

使用的是 Vue CLI 来创建和管理 Vue 项目&#xff0c; 可以通过设置 --port 参数来指定启动的端口号。以下是具体的步骤&#xff1a; 打开命令行终端 进入您的 Vue 项目目录 运行以下命令&#xff0c;通过 --port 参数指定端口号&#xff08;例如&#xff0c;这里设置端口号…

mybatisPlus注解将List集合插入到数据库

1.maven引入依赖&#xff08;特别注意版本&#xff0c;3.1以下不支持&#xff09; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3.1</version></dependency&g…

自建服务器如何备案?

随着互联网的普及和发展&#xff0c;越来越多的人开始考虑自建服务器。然而&#xff0c;在中国大陆地区&#xff0c;自建服务器需要进行备案。本文将介绍自建服务器备案的流程、所需材料以及注意事项。 一、备案流程 确定备案地区 根据《中华人民共和国计算机信息网络国际联网…

Python:numpy.rot90() 三维矩阵绕着某一轴旋转

文章目录 1. numpy.rot90() 语法2. numpy.rot90() 举例说明3.axes说明 在NumPy中&#xff0c;可以使用 numpy.rot90() 函数对三维矩阵绕着某个轴旋转。 1. numpy.rot90() 语法 numpy.rot90(m, k1, axes(0, 1)). m: 输入的数组。k: 旋转的次数&#xff0c;默认为1。axes: 旋转…

GraphicsMagick 的 OpenCL 开发记录(五)

<2022-03-09 Wed> 调用clCreateBuffer()产生异常问题&#xff08;三&#xff09; 我在这里找到了一些有用的信息&#xff1a;“crash in NEO::DrmAllocation::makeBOsResident or in checkAllocationsForOverlapping when using more than one opencl block in gnuradi…

【Linux】Ubuntu安装搜狗中文输入法

配置语言 设置 - 区域与语言 - 管理已安装的语言 - 添加汉语并置顶 - 输入法系统选择fcitx - 应用到整个系统 配置键盘布局 设置 - 键盘 - 输入源 - 添加汉语并置顶 安装搜狗输入法依赖 sudo apt -f install sudo apt install libqt5qml5 libqt5quick5 libqt5quickwidgets…

【python】—— 集合

目录 &#xff08;一&#xff09;集合的概念 &#xff08;二&#xff09;集合的使用 2.1 集合的创建 2.2 集合元素的唯一性 2.3 集合的操作 2.3.1 并集 2.3.2 交集 2.3.3 差集 2.3.4 补集 2.4 遍历集合 2.5 其他集合操作 2.5.1 添加元素 2.5.2 移除元素 2.5.3 清…

【Alibaba工具型技术系列】「EasyExcel技术专题」实战技术针对于项目中常用的Excel操作指南

这里写目录标题 EasyExcel教程Maven依赖 EasyExcel API分析介绍EasyExcel 注解通用参数ReadWorkbook&#xff08;理解成excel对象&#xff09;参数ReadSheet&#xff08;就是excel的一个Sheet&#xff09;参数注解参数通用参数 WriteWorkbook&#xff08;理解成excel对象&#…

冒泡排序-BubbleSort

1、基本思路 从数组的左边开始&#xff0c;比较两个元素的大小&#xff0c;当左边大于右边时&#xff0c;更换左右元素位置&#xff0c;否则不改变&#xff1b;接着向右移动一步&#xff0c;比较第二个元素和第三个元素的大小&#xff0c;重复上述操作&#xff0c;直到最后一个…

QEMU源码编译CentOS

安装编译依赖 sudo yum groupinstall "Development Tools" sudo yum install -y cmake make ninja-build glib2 glib2-devel spice-server-devel spice-protocol usbredir-devel gcc sudo yum install iasl libssh-devel bzip2-devel libepoxy-devel sudo yum ins…

为什么 Golang Fasthttp 选择使用 slice 而非 map 存储请求数据

文章目录 Slice vs Map&#xff1a;基本概念内存分配和性能Fasthttp 中的 SliceMap性能优化的深层原因HTTP Headers 的特性CPU 预加载特性 结论 Fasthttp 是一个高性能的 Golang HTTP 框架&#xff0c;它在设计上做了许多优化以提高性能。其中一个显著的设计选择是使用 slice 而…

Ubuntu开机停在Grub命令行以及启动后进入emergency模式的解决方法

主机上两个硬盘&#xff0c;本来都是Ubutun系统&#xff0c;然后将其中一个重装为windows系统&#xff0c;结果另外一个硬盘的Ubutun启动不了 首先会卡在grub命令行界面&#xff0c;类似下面这样&#xff1a; 这种情况往往是 GRUB 的系统文件或者配置文件损坏了&#xff0c;但…

基于麻雀优化算法SSA的CEEMDAN-BiLSTM-Attention的预测模型

往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 风速预测&#xff08;一&#xff09;数据集介绍和预处理-CSDN博客 风速预测&#xff08;二&#xff09;基于Pytorch的EMD-LSTM模型-CSDN博客 风速预测&#xff…

Android: alarm定时很短时,比如500ms,测试执行mPowerManager.forceSuspend()后,系统不会suspend

参考文档&#xff1a; https://blog.csdn.net/weixin_35691921/article/details/124961404 Android: alarm定时很短时&#xff0c;比如500ms&#xff0c;然后执行mPowerManager.forceSuspend()后&#xff0c;系统不会suspend&#xff0c;原因分析&#xff1a; static int ala…

【iOS】——基于Vision Kit框架实现图片文字识别

文章目录 前言一、文本识别的分类二、实现步骤1.导入Vision Kit框架2.创建请求处理器3.在请求处理器中设置文字识别功能4.将图片添加到请求处理器中5.发起文字识别请求6.处理识别结果 三、运行结果测试1.纯英文环境2.中英文混合环境 前言 根据苹果的官方文档&#xff0c;Visio…