GLPK/Linux 作業系統
此頁面介紹如何在 Linux 作業系統上構建和安裝 GLPK。Linux 上的標準編譯器套件是 GCC。儘管如此,也可以安裝和使用其他編譯器。
預打包選項:作為一個 替代方案,GLPK 也可能作為 Debian(Ubuntu 使用)或 RPM(Fedora 使用)包提供。安裝包比編譯更方便,但包往往比釋出版滯後一到多個版本。手動編譯還可以讓你自定義構建配置,使生成的庫更好地匹配你的環境和需求。
因此,鼓勵新使用者從原始碼構建 GLPK。如果你需要幫助,可以隨時從help-glpk郵件列表獲取幫助。
下表顯示了與 Linux 相關的關鍵 GLPK 檔案
| 檔案 | 角色 | 預設值 | 檔案 |
|---|---|---|---|
| glpsol | 命令列求解器 | /usr/local/bin | 可執行檔案 |
| glpk.h | GLPK API 標頭檔案 | /usr/local/include | C 語言標頭檔案 |
| libglpk.a | 靜態庫 | /usr/local/lib | 常規存檔檔案 |
| libglpk.so | 共享庫 | /usr/local/lib | 指向共享物件檔案的符號連結 |
注意:如果 GLPK 作為 Linux 包 新增,則會從指示的路徑中省略“/local” 部分。
警告:API 使用者不應該包含除glpk.h.
顯示的路徑詳細資訊假設正常的構建和安裝。靜態庫用於編譯時連結,共享庫用於執行時連結。根據 GLPK 的配置方式,兩者可能並不存在。使用者有時會遇到檔案位置和搜尋路徑的問題——如果是這樣,下面給出了一些故障排除提示。GLPK 使用的位置符合Linux 檔案系統層次結構標準。
以下說明指的是
- 從 GLPK 版本 4.42 到 4.65 的代表性升級。
請注意
- 如果你正在進行全新安裝,請跳過與 4.42 相關的任何說明
- 對於更高版本的版本,4.65 應該用相關版本號替換。
為了編譯,需要 gcc。 GCC 是 GNU 編譯器集合。該集合包含一個 C 語言 編譯器。你可以使用以下命令檢查已安裝的版本
$ gcc --version
使用 ODBC 需要以下任一軟體包:iODBC或unixODBC軟體包。
預設安裝路徑為/usr/local。在 Fedora 派生的發行版(Fedora、Red Hat、Centos、...)上/usr/local/lib預設情況下不在庫搜尋路徑中。你可以使用以下命令新增路徑
$ sudo su # echo /usr/local/lib >> /etc/ld.so.conf.d/local.conf # /sbin/ldconfig # exit
將 GLPK 4.65 壓縮包下載到使用者空間中的目錄(如果你已經有了,請跳過此步驟)
$ wget ftp://ftp.gnu.org/gnu/glpk/glpk-4.65.tar.gz $ wget ftp://ftp.gnu.org/gnu/glpk/glpk-4.65.tar.gz.sig
驗證壓縮包
$ gpg --verify glpk-4.65.tar.gz.sig glpk-4.65.tar.gz
如果你的金鑰環中缺少金鑰,可以使用以下命令安裝它
$ gpg --recv-keys 5981E818
然後解壓縮壓縮包
$ tar -xzvf glpk-4.65.tar.gz $ cd glpk-4.65
應用任何後續的 補丁——很少需要,因為重要的錯誤修復通常會觸發新的釋出。
尋找 PDF 文件(或者切換到子目錄doc並查詢)
$ find . -name "*.pdf" -print
強烈建議你在繼續之前熟悉“在您的計算機上安裝 GLPK”,該文件位於doc/glpk.pdf中。你可以使用以下命令檢視它
$ evince doc/glpk.pdf &
或者,類似的資訊以文字形式提供
$ less INSTALL # q to quit
接下來確定你要使用哪些配置選項。例如,對 ODBC(開放資料庫連線)的支援允許 MathProg 與關係資料庫和電子表格互動。列出選項(less管道提供滾動,按q退出)
$ ./configure --help | less
使用你的系統包管理器安裝任何依賴的 Linux 包。例如,ODBC 需要存在相應的 ODBC dev(開發人員)標頭檔案包。
現在配置 GLPK。預設情況下,GLPK 構建庫的靜態版本和共享版本。常見的選項包括(你只需要其中一個命令)
$ ./configure # default $ ./configure --enable-dl --enable-odbc # for ODBC support with dynamic linking to ODBC library $ ./configure --disable-shared # prevent GLPK shared library
配置選項--enable-dl不會指示 GLPK 構建共享庫,而是告訴 GLPK 動態連結其支援庫。
如果你需要設定環境變數,請在任何配置選項後的配置命令列上設定——使用--help瞭解更多詳情。
不要使用包含空格字元的路徑,因為這些路徑不受automake.[1]
支援
編譯[編輯 | 編輯原始碼]現在編譯並檢查 GLPK。該make選項--jobs=4
$ make --jobs=4 $ make check OPTIMAL LP SOLUTION FOUND
允許在多核硬體上並行處理——在單核(較舊)機器上或遇到錯誤訊息時,應省略它。根據你的 CPU 效能,編譯步驟可能需要 15 秒到幾分鐘。
$ examples/glpsol --version GLPSOL: GLPK LP/MIP Solver, v4.65
檢查本地 GLPSOL 版本
安裝系統安裝使 GLPK 對所有使用者普遍可用,但需要sudo 許可權。系統安裝是可選的,可以省略。
$ tar -xzvf glpk-4.65.tar.gz $ cd glpk-4.65 $ ./configure $ sudo make uninstall
解除安裝 GLPK 4.65(如果有)(步驟一和三可能沒有必要)
解除安裝以前版本的 GLPK 並不是嚴格必要的,但這是一個好習慣。
$ sudo make install Libraries have been installed in: /usr/local/lib
安裝 GLPK 4.65
$ ls -lF /usr/local/lib/libglpk.a $ ls -lF /usr/local/lib/libglpk.so
檢查預期檔案是否存在
$ which glpsol /usr/local/bin/glpsol
檢查 GLPSOL 是否普遍可用
$ sudo ldconfig --verbose
更新執行時連結器快取(可能沒有必要)
收尾$ make clean # the Makefile remains, unlike distclean
最後,清理 GLPK 4.65 原始碼目錄
$ cd ~/glpk $ rm -fr glpk-4.65
並根據需要刪除過時的分支(如果存在,原始的 GLPK 4.65 壓縮包將保留)
原始碼包含更多關於構建過程的資訊,包括一些有用的配置選項
$ less INSTALL # q to quit
在 x86 架構上使用 GCC 編譯 GLPK 時,使用選項編譯可以提高 20% 的效能-mfpmath=both。這需要啟用 SSE。這是 x86-64 編譯器的預設設定。對於 32 位編譯器,SSE 必須透過以下任一方式啟用-march=<cpu-type>, -msse,或-msse2.
-mfpmath=both允許使用 FPU 和 SSE 暫存器。參見 http://gcc.gnu.org/onlinedocs/gcc-4.7.1/gcc/i386-and-x86_002d64-Options.html
示例
$ export CFLAGS="-march=native -O3 -pipe -mfpmath=both" $ ./configure --enable-dl --enable-mysql --enable-odbc $ make -j8 $ make check $ sudo make install $ sudo ldconfig
- -march=native意味著該程式碼可能無法在不同的 CPU 上使用。
- -pipe透過使用管道而不是檔案來減少編譯時間
- -j8透過並行化減少編譯時間,假設有 8 個核心
要查詢系統上的關鍵 GLPK 檔案,請嘗試
$ find -P /usr -name "*glpk.*" \( -type f -o -type l \) -exec file '{}' \; 2>/dev/null
要檢查當前搜尋路徑,請嘗試
$ printenv | grep PATH
以上兩個呼叫都是被動的,不會改變你的系統。
您可能需要顯式更新執行時連結器快取
$ sudo ldconfig --verbose
- ↑ "Re: Automake's invokation of libtool doesnt handle $prefix with spaces in directory names". Free Software Foundation. Retrieved 10 May 2012.