前瞻:
這是對前面博客的補充
完整的過程個人已經在Ubuntu上實現了,現在用docker rocker/rstudio(linux)再實現一次,完整記錄整個過程。
當然,大部分過程參見官方Installation guide,部分額外的詳細描述。
過程:
- 在自己的目錄下下載並解壓concorde壓縮包
- (重要)concorde需要linear programming solver,常用的有QSOpt和IBM的CPLEX,鑑於concorde自從2003年就沒有更新過,CPLEX現在的版本已經不再合適,故選用QSOpt。過程見如下代碼和圖,最後qsopt的路徑path=/home/kaiyouhu/qsopt
mkdir qsopt cd qsopt wget http://www.math.uwaterloo.ca/~bico/qsopt/beta/codes/linux64/qsopt.a wget http://www.math.uwaterloo.ca/~bico/qsopt/beta/codes/linux64/qsopt.h wget http://www.math.uwaterloo.ca/~bico/qsopt/beta/codes/linux64/qsopt
-
執行如下代碼即可完成。
./configure --with-qsopt=/home/kaiyouhu/qsopt make
-
測試(以上過程在Ubuntu16.04 gcc 5.4上實現無問題)
./concorde -s 99 -k 100
翻車:(在docker上Debian gcc6.3環境)
(大家就當沒看見)問題出現在-fPIC上面,前面wsl的gcc --version
後面docker容器的gcc --version
問題大概是不同版本的gcc對靜態庫打包的區別。如果出現這樣的問題。
解決辦法:
首先是qsopt要換,情況如下:
注意:下面的qsopt.PIC.a下載後改名成qsopt.a
wget -O qsopt.a http://www.math.uwaterloo.ca/~bico/qsopt/beta/codes/PIC/qsopt.PIC.a
然後,configure的具體命令如下
CFLAGS="-fPIC -O2 -g" ./configure --with-qsopt=/home/kaiyouhu/qsopt
# continue
make
cd TSP
./concorde -s 99 -k 100
其他的同Ubuntu16上的過程。