在redhat6.4上编译z3求解器

因为项目需要,我们使用到了微软的z3求解器求约束,但是z3求解器在红帽平台上并没有发布编译好的二进制版本,而我们的运行环境是红帽的企业版6.4,因此需要自己编译相应的二进制。

z3是由微软公司开发的一个优秀的SMT求解器(也就定理证明器),它能够检查逻辑表达式的可满足性。目前的最新版本是4.4.1,github主页

z3主页上面下载最新的代码

git clone [email protected]:Z3Prover/z3.git

切换工作目录到z3下执行

python ./scripts/mk_make.py

报告如下的错误

Traceback (most recent call last):
File "./scripts/mk_make.py", line 16, in <module>
update_version()
File "/home/ace/z3/scripts/mk_util.py", line 2614, in update_version
mk_version_dot_h(major, minor, build, revision)
File "/home/ace/z3/scripts/mk_util.py", line 2641, in mk_version_dot_h
‘Z3_FULL_VERSION‘: get_full_version_string(major, minor, build, revision)
File "/home/ace/z3/scripts/mk_util.py", line 3414, in configure_file
print("Generating {} from {}".format(output_file_path, template_file_path))
ValueError: zero length field name in format

这错误实在是不好定位,第一个念头是不是和python版本有关系,当时还不太确定,上谷歌一通搜索,终于在这里找到了一个貌似有点相关的bugfix。

Fix build error introduced with commit 1c5a57a "glapi/es3.1: Add support
for GLES versions > 3.0" with Python < 2.7.

File "src/mapi/glapi/gen/gl_genexec.py", line 230, in <module>
printer.Print(api)
File "src/mapi/glapi/gen/gl_XML.py", line 120, in Print
self.printBody(api)
File "src/mapi/glapi/gen/gl_genexec.py", line 187, in printBody
condition_parts.append(‘(ctx->API == API_OPENGLES2 && ctx->Version >= {})‘.format(int(f.api_map[‘es2‘] * 10)))
ValueError: zero length field name in format

如此确定应该是和python版本相关,所以着手升级红帽的python版本,红帽6.4默认带的python版本是2.6.6,升级过程参考了linux公社上的一篇文章

将python升级到2.7.6之后再次运行

python ./scripts/mk_make.py

还是报错

UnicodeEncodeError: ‘ascii‘ codec can‘t encode character u‘\xa9‘ in position

不过这次的错误比较容易理解,解决方案也比较简单,在 scripts/mk_util.py文件头添加

import sys

reload(sys)

sys.setdefaultencoding(‘utf-8‘)

指定文件字符集为utf-8。

之后再运行

python scripts/mk_make.py

顺利通过编译配置,然后按照官网上面的指导

cd build

make

sudo make install

顺利编译成功,输入测试文件得到了预期的结果。

参考:

https://github.com/Z3Prover/z3

http://code.metager.de/source/history/freedesktop/mesa/mesa/src/mapi/

http://www.linuxidc.com/Linux/2014-03/98608.htm

时间: 2024-12-19 04:50:47

在redhat6.4上编译z3求解器的相关文章

TRAC-IK机器人运动学求解器

TRAC-IK和Orocos KDL类似,也是一种基于数值解的机器人运动学求解器,但是在算法层面上进行了很多改进,相比KDL求解效率(成功率和计算时间)高了很多.下面在Ubuntu16.04中安装TRAC-IK(之前已经安装过ROS Kinetic): sudo apt-get install ros-kinetic-trac-ik 按照ROS教程新建一个名为ik_test的Package,并创建urdf文件夹用于存放机器人URDF描述文件,创建launch文件夹存放launch文件: 参考tr

在64位linux上编译32位程序

ld指令有一个选项:--oformat output_format,用于指定输出文件的格式.输入文件./kernel/kernel.o等是elf32格式,当前系统是64位,而ld默认生成的文件格式是elf64-x86-64:因此会出现"ld: warning: i386 architecture of input file `./kernel/kernel.o' is incompatible with i386:x86-64 output"这样的提示.之前,将系统从三墩转移到我自己的

Win7 VS2015简单编译FFMPEG播放器FFPlay

Win平台简单编译FFPlay播放器,顺便纪念下雷霄骅,一年前刚学FFMPEG时还看过他的博客,昨晚再次搜FFMPEG文章时才知道人已经走了... 做成了视频放到B站 http://www.bilibili.com/video/av8644322/ C++版本也是可以编译的,只是要修改非常多的C语言转C++的强制类型转换,这个例子是C语言写的,改扩展名为cpp后,有不少cpp关键字的参数要修正,不过基本上花点时间就能解决,没什么难度. 现在主要问题是网上能找到的例子,包括FFPlay都是基于SD

Maxwell顺态求解器电磁力分析

文源:技术邻 问题描述:求解一段通有正弦交流电的直导线在某一稳态磁场中的受力情况,并简单验证仿真结果. 模型介绍: 如上几何模型中10mm边长立方体代表永磁体,材料属性为材料库中的NdFe35,修改磁化方向为X方向,其他属性不变,如下图所示.其中黄色圆柱体代表铜导线,红色框线代表求解区域(真空).导线端面与求解域重合,电流不会泄漏以便顺利计算. Maxwell求解树如下: Solution type: Transient瞬态求解器 Boundaries:未指定,系统选取默认求解边界. Excit

解决Qt在openSUSE上编译出现“cannot find -lGL”错误

在openSUSE上编译QT5.4程序出现“cannot find -lGL”,就连example都无法通过编译.QT是在官网下的最新的安装包. 大体意思是,缺少qt运行时所需要的openGL库.决绝手段stackoverflow上给出很好的答案. http://stackoverflow.com/questions/15355837/installing-qt-on-linux-cannot-find-lgl 由于openSUSE上使用的包管理器是zypper,因此只要报yum换成zypper

Altair.Acusolve.v12.0.311.HotFix.Win32_64.&amp;.Linux64 3CD计算流体动力学(CFD)求解器

Altair.Acusolve.v12.0.311.HotFix.Win32_64.&.Linux64 3CD计算流体动力学(CFD)求解器 Altair AcuSolve是一款领先的基于有限元的通用计算流体动力学(CFD)求解器,可以解决非常复杂的工业和科研问题.AcuSolve的稳健性 和扩展性求解技术在全非结构网格基础上仍能保持无与伦比的求解精度.无论是稳态的RANS仿真应用还是复杂瞬态的多物理场仿真, AcuSolve都能容易求解并保证良好的精度.领先的技术 精确的结果    AcuSo

人工智能包括约束求解器吗?

以下是翻译Optaplanner创始人Geoffrey De Smet的一篇文章<Does A.I. include constraint solvers?>. 因为英语及中文表达习惯的差异,以该博文发表示Optaplanner官网,其描述的问题及概念具有一定的上下文关联性:因此,为了认还不太熟悉Optaplanner的同学更容易理解,令文章更符合中文母语读者的阅读习惯,我并没有完全按字面生硬直译.其中添加了一些扩展性的意译,基本上能在脱离Optaplanner官网上下文情况下,一定程序上表达

QuantLib 金融计算——数学工具之求解器

目录 QuantLib 金融计算--数学工具之求解器 概述 调用方式 非 Newton 算法(不需要导数) Newton 算法(需要导数) 如果未做特别说明,文中的程序都是 Python3 代码. QuantLib 金融计算--数学工具之求解器 载入模块 import QuantLib as ql import scipy from scipy.stats import norm print(ql.__version__) 1.12 概述 QuantLib 提供了多种类型的一维求解器,用以求解单

sat求解器是一个大数据系统

Understanding VSIDS Branching Heuristics in Conflict-Driven Clause-Learning SAT Solvers Jia Hui Liang Vijay Ganesh Ed Zulkoski Atulan Zaman Krzysztof Czarnecki Liang J.H., Ganesh V., Zulkoski E., Zaman A., Czarnecki K. (2015) Understanding VSIDS Bran