背景
Cbc是Coin-OR研发的开源MILP求解器,默认编译选项实际使用时,若在外部构建多个模型并行求解,可能会出现求解阻塞的问题。
其主要原因是默认未开启:
CBC_THREAD_SAFE
使用CMake编译(Windows)
【从零开始】coin-or/CoinUtils Osi Clp Cgl Cbc源码构建debug(CLion/CMake)_ymzhu385的博客-CSDN博客
在CMakeList.txt中已经有类似的定义:
add_definitions("-DCBC_THREAD_SAFE")
若需要自己使用CMake编译的同学可以加上该命令
Linux 下编译
以Cbc 2.10.3 为例,默认便以流程为下:
# 解压所有*tar.gz文件
ls *.tar.gz | xargs -n1 tar xzvf
unzip Cbc-releases-2.10.3.zip
cp -rf Clp-releases-1.17.6/Clp ./Cbc-releases-2.10.3
cp -rf Cgl-releases-0.60.3/Cgl ./Cbc-releases-2.10.3
cp -rf CoinUtils-releases-2.11.4/CoinUtils ./Cbc-releases-2.10.3
cp -rf Osi-releases-0.108.6/Osi ./Cbc-releases-2.10.3
目前尝试在gcc/g++ 4.4.7的版本下可以编译成功
cd Cbc-releases-2.10.3
# 由于存在依赖,直接使用make&make install可能会出现问题
# arm 架构: ./configure -C --build=arm-linux
./configure -C
make
make install
在生成makefile时使用如下语句即可
./configure -C CXXFLAGS="-DCBC_THREAD_SAFE"