最近做畢設,要用到Sat Solver求解器,關於Sat Sovler的中文資料甚少,自己摸索總結了一下,特此記錄。
主要說明一下軟件的安裝,使用非常簡單。sat solver有多種實現,例如,minisat,cryptominisat,sat4j等等,以cryptominisat爲例。
硬件平臺:VmVare11,Ubuntu12.04 LTS Desktop。
安裝軟件爲cryptominisat-2.9.11,可從Github下載。
首先查看cryptominisat-2.9.11的INSTALL文件。
-----------
Libraries needed
-----------
You will need the following libraries to compile the sources:
* libz
-----------------
Building the source
-----------------
There are two ways to build the source. With cmake or with autotools.
I personally use cmake.
------------------
Building using autotools
------------------
$ mkdir build
$ cd build
$ ../configure
$ make
Use like: ./cryptominisat satfile.cnf
If you got your source from the GIT/SVN, then you should do the following
before doing the above::
* Install automake, autoconf, libtool
* Issue 'make -f Makefile.cvs' in the root dir
---------
我們只說明autotools的安裝方式,至於cmake安裝方式,以後再補上。
準備工作:
我們看到,需要的庫有libz.所以需要先安裝這個庫。
我們可以自行搜索 Linux zlib安裝,zlib中就包含了libz。安裝非常簡單 。./configure && make&&make install即可。
autotools安裝,即使用 ./configure && make&&make install 完成安裝。需要以下組件:
1.確保有工具automake,autoconf,libtool。
可用automake –version,automake –libtool查看,沒有的話執行
sudo apt-get install automake
sudo apt-get install libtool
即可,不用安裝autoconf的原因是automake包含了autoconf.
2.確保有make工具。可用make –version查看,沒有的話執行
sudo apt-get install make
3.要有一個編譯器,可以使用gcc,執行
sudo apt-get install gcc
4.要安裝此軟件包build-essential,作用看文章最後,執行
sudo apt-get install build-essential
具體安裝步驟:
1.作者說如果是從Github或者SVN下載的源碼,需要先在根目錄執行
make -f Makefile.cvs
這樣會生成configure文件,才能進行下一步。
(注意:根目錄是指cd到cryptominisat2.9.11這個目錄即可)
2.執行
mkdir build
cd build
實際上build目錄已經存在,不需要這一步。
3.在根目錄下執行configure文件。
./configure
4.執行
make
完成安裝。
使用方式README裏寫的很清楚,用
./cryptominisat cnf文件名即可。
可能碰到的問題:
1.編譯錯誤,提示沒有找到編譯器。這說明沒有任何的編譯器,可以使用gcc,執行
sudo apt-get install gcc
2.已經安裝了zlib,可是編譯錯誤,提示未找到zlib。
在linux操作系統上面開發程序, 光有了gcc 是不行的
它還需要一個 build-essential軟件包
作用是提供編譯程序必須軟件包的列表信息
也就是說 編譯程序有了這個軟件包
它才知道 頭文件在哪 才知道庫函數在哪
還會下載依賴的軟件包 最後才組成一個開發環境
當然 build-essential包 安裝時 需要的依賴包 有些你用不上
軟件包: build-essential 安裝方法:
sudo apt-get install build-essential