首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MINGW并与CPLEX库链接从linux编译windows可执行文件

使用MINGW并与CPLEX库链接从linux编译windows可执行文件
EN

Stack Overflow用户
提问于 2018-05-23 16:37:02
回答 1查看 578关注 0票数 2

这样做的目的是防止我使用双引导窗口,必须在同一个系统中安装两次CPLEX (存储非常有限),并且ofc能够从我的主要操作系统debian linux编译所需的跨平台可执行文件。

因此,我使用的是mingw64,我的编译脚本如下所示:

代码语言:javascript
复制
#!/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版本,现在我正在尝试使用全局(我想)包含文件但使用必要的cplex库的windows版本(.lib)来编译我的代码。

我原以为噩梦将是连接,但令我惊讶的是,我甚至没有设法到那里。由于缺少一个generic.h文件(据我所了解的一点搜索,它应该与内核或其他相关),所以明威编译器正在中止编译。

代码语言:javascript
复制
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相关的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-23 17:17:54

简单地说,答案是否定的;你可能没有任何希望让这件事奏效。

在第262行的ilosys.h中,我们看到以下内容:

代码语言:javascript
复制
#if !(defined(name2))
# if defined(ILO_MSVC) || defined(ILO_LINUX) || defined(ILO_APPLE) || defined(ILO_HP11)
#  undef name2
#  define name2(a,b)      _name2_aux(a,b)
#  define _name2_aux(a,b)      a##b
# else
#include "generic.h"
# endif
#endif

可疑之处在于没有定义ILO_MSVC,这就是为什么要包含generic.h。如果我们到第11行的ilosys.h,我们会看到:

代码语言:javascript
复制
#if defined(_MSC_VER)
# undef  _Windows
# define _Windows
# undef  _WINDOWS
# define _WINDOWS
# undef  ILO_WINDOWS
# define ILO_WINDOWS
# undef  ILO_MSVC
# define ILO_MSVC
#include <stddef.h>
# if defined(_WIN64)
#  undef  ILO64
#  define ILO64
#  undef  ILO_WIN64
#  define ILO_WIN64
# else
#  undef  ILO_WIN32
#  define ILO_WIN32
# endif
//# if defined(ILO_MSVC8)
//#  undef _WIN32_WINNT
//#  define _WIN32_WINNT 0x0400
//# endif
#endif

因此,只有在定义了ILO_MSVC时才定义_MSC_VER。而且,只有在安装了MicrosoftVisualC++编译器(例如,参见_MSC_VER )时,才会定义C++。

最后,如果您查看详细的系统要求 for CPLEX和Windows,很明显需要Microsoft 2015或2017。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50493419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档