前瞻:
这是对前面博客的补充
完整的过程个人已经在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上的过程。