【发布时间】:2018-05-23 16:37:02
【问题描述】:
这项工作的目的是防止我使用双启动窗口,必须在同一系统中安装两次 CPLEX(存储空间非常有限),并且 ofc 能够从我的主操作系统编译所需的跨平台可执行文件,即debian linux。
出于这个原因,我正在使用 mingw64,我的编译脚本如下所示:
#!/bin/sh
#COMPILATION FLAGS
FLAGS='-DIL_STD -DILOUSEMT -D_REENTRANT'
EXTRA='-std=c++11 -static -static-libgcc -static-libstdc++'
#INCLUDES
OPL_INCL='-I/opt/ibm/ILOG/CPLEX_Studio128/opl/include'
CPL_INCL='-I/opt/ibm/ILOG/CPLEX_Studio128/cplex/include'
CON_INCL='-I/opt/ibm/ILOG/CPLEX_Studio128/concert/include'
#LINKER
OPL_LIB='-L/opt/ibm/ILOG/CPLEX_Studio128/opl/lib/x64_windows_vs2017/stat_mda'
CPL_LIB='-L/opt/ibm/ILOG/CPLEX_Studio128/cplex/lib/x64_windows_vs2017/stat_mda'
CON_LIB='-L/opt/ibm/ILOG/CPLEX_Studio128/concert/lib/x64_windows_vs2017/stat_mda'
#echo $FLAGS
/usr/bin/x86_64-w64-mingw32-g++ $FLAGS $OPL_INCL $EXTRA main.cpp $OPL_LIB $CON_LIB $CPL_LIB -lcplex -lm -lpthread
#g++ -std=c++11 $FLAGS $OPL_INCL main.cpp $OPL_LIB $CON_LIB $CPL_LIB -lcplex -lm -lpthread
我所做的是我从另一个 Windows 安装中复制了 Windows 版本的库文件,现在我正在尝试使用全局(我想)包含文件但使用 Windows 版本(.lib ) 的必要 cplex 库。
我以为噩梦会是链接,但令我惊讶的是,我什至没有设法到达那里。 Mingw 编译器正在中止编译,因为缺少 generic.h 文件(根据我的一些搜索了解,它应该与内核或其他东西有关)
In file included from /opt/ibm/ILOG/CPLEX_Studio128/opl/include/ilconcert/iloenv.h:21:0,
from /opt/ibm/ILOG/CPLEX_Studio128/opl/include/ilconcert/iloalg.h:21,
from /opt/ibm/ILOG/CPLEX_Studio128/opl/include/ilconcert/ilomodel.h:21,
from /opt/ibm/ILOG/CPLEX_Studio128/opl/include/ilcplex/ilocplex.h:27,
from /opt/ibm/ILOG/CPLEX_Studio128/opl/include/ilopl/iloopl.h:23,
from main.cpp:3:
/opt/ibm/ILOG/CPLEX_Studio128/opl/include/ilconcert/ilosys.h:262:21: fatal error: generic.h: No such file or directory
#include "generic.h"
^
compilation terminated.
我还尝试使用g++ 进行编译测试,并且很快绕过了这个错误,并且正如预期的那样,新错误与链接 cplex 库有关:/usr/bin/ld: cannot find -lcplex,这可能是因为我没有包含 linux库文件夹。
我是否有任何希望这样做,或者这首先是不可能的?
PS:我有一段更简单的代码,其中我正在做完全相同的事情(没有 CPLEX),并且编译就像一个魅力。所以我想这个问题也应该与 CPLEX 相关。
【问题讨论】:
标签: c++ linux compilation mingw cplex