Ipopt这个库在linux下编译是很容易的,但是在windows下想用它就很麻烦了。

官方只提供了较旧版本的Ipopt的编译版本,只能用在较旧版本的vs上。如果想用新版本或支持新的vs则只能自行编译。而Ipopt官网的windows编译教程写的不清不楚,按照官网的教程根本无法成功编译。

官网教程地址:https://coin-or.github.io/Ipopt/INSTALL.html

Ipopt 3.12官方的说明文档:https://projects.coin-or.org/Ipopt/browser/stable/3.12/Ipopt/doc/documentation.pdf?format=raw

下面我把这两周折腾编译的成果记下来分享给大家,方便有同样需求的朋友少走些弯路。

准备编译环境

Ipopt 需要在 Linux 环境下编译,在Windows系统上可以通过 MinGWMSYS2windows下的linux子系统 提供Linux环境支持。这里我按照Ipopt官网的教程使用的是 MSYS2

MSYS2 可以在 https://www.msys2.org/ 下载。选择64位的版本下载安装。

装好后可以在开始菜单中找到MSYS的快捷方式,注意如果要编译64位的库需要启动64位的MSYS2。

打开后的界面是这样的:

出现了一个终端,它默认的home文件夹在C:\msys64\home中,接下来需要配置环境变量使得在该环境中可以找到vs的编译器 cl 连接器 link 以及Intel Fortran编译器 ifort 的位置。这里我的vs版本为 Visual Studio 2015 , intel fortran 的版本为 Intel Parallel Studio XE 2018

为了方便我写了个bat脚本实现相应环境变量的配置

set MSYS2_PATH_TYPE=inherit
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64
call "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries\windows\bin\ifortvars.bat" intel64 vs2015
C:\msys64\mingw64.exe
exit 0

将这段代码中对应的msys可执行文件以及vs和intel fortran的位置改成读者自己电脑上相应的位置即可,最后保存为bat文件双击就可用了。

输入 cl 以及 ifort 若有类似下图的输出说明可以成功找到这两个编译器了。

之后安装一些编译过程中需要的软件

pacman -S binutils diffutils git grep make patch pkg-config

在用pacman装软件的过程中可能会因为 显而易见 的原因导致网速很慢甚至下载失败,可以通过更改软件源或设置 http_proxy 环境变量配置代理来解决,这里因为我使用软路由不存在网络问题就没有进行上述设置。

然后还需要把C:\msys64\usr\bin文件夹下的 link.exe 以及 ln.exe 改名为 link.exe.bak ln.exe.bak 前者是防止链接的时候使用了linux下的链接器导致链接失败,后者是为了防止创建出linux软链接导致vs的编译器无法识别。

下载源码

git 下载源码(在git下载源码过程中同样因为 显而易见 的原因出现网络问题,需要配置git的代理解决),注意这里的方法只能编译 Ipopt 3.12 无法编译最新的 Ipopt 3.13。相应的命令如下:

 git clone -b stable/3.12 https://github.com/coin-or/Ipopt.git CoinIpopt

之后进入 CoinIpopt 目录,进入 ThirdParty 目录

cd CoinIpopt/ThirdParty/

如果是用 git 直接下载的话这里应该是空的,因为这些库是在git上以链接的形式存放的我们需要到 GitHub 上找到 ThirdParty 目录之后把这几个链接下载下来放到相应的文件夹里:

(注意:需要选择stable/3.12的分支,下错版本很可能编译不过)

例如下载 ASL 可以点击 ASL @ f0b17f3 之后跳出一个新的 GitHub 页面 然后点击 Clone or download 下载zip压缩包然后把文件解压到 CoinIpopt/ThirdParty 下的 ASL 文件夹即可(需要自行创建ASL文件夹)

之后执行下列操作下载 Blas、Lapack、ASL、Metis、Mumps 的源码:

cd Blas/
./get.Blas
cd ../Lapack/
./get.Lapack
cd ../ASL
./get.ASL
cd ../Metis/
./get.Metis
cd ../Mumps/
./get.Mumps

HSL 的源码比较特殊它提供两个版本,一个是开源的老版本只支持MA27求解器,另外是需要付费购买的完整版本,如果是学生的话可以发邮件注册使用教育版但是比较麻烦。这里我用的是学长给我的源码。

HSL 的源码解压到 ThirdParty/HSL 目录下并重命名为 coinhsl 即可。

到此,所有源码已经下载完毕,接下来开始编译。

进行编译

首先进入CoinIpopt 文件夹中,输入以下命令使用msvc进行配置:

 ./configure --enable-doscompile=msvc

默认会编译 release 版的静态库,如果需要 debug 版的静态库则需要增加 --enable-debug 如果需要额外的运行时检查则增加 --with-ipopt-checklevel=1 这样会对运行速度有很大影响。(在官方的文档中说默认是编译成动态库的,但是不知道为什么我电脑上默认编译出来的时静态库……)
此时开始检查环境信息配置相关文件生成 makefile

如果最终出现 Main Ipopt configuration successful 说明配置成功,接下来可以用make命令进行编译了。

为了加快编译速度可以使用 make -j4 使用多个线程同时编译。

编译会花费2个小时左右,这期间可以打会儿游戏。

如果 make 命令执行完后没有任何报错,说明编译成功了,可以松一口气了。

接下来执行 make test 命令进行测试,如果上一步成功的话,这一步也很快就通过了,会在CoinIpopt\Ipopt\test 生成 hs071_*.exe 的可执行文件同时终端上也会提示测试成功。

库的安装及使用

最后执行 make install 它默认会把库安装在 C:\msys64\mingw64 下,其中生成的可执行文件 ipopt.exebin 文件夹下:

可以看到大小有97兆,说明其用到的各种库都被静态链接进去了。

头文件存放在include目录下:

库文件存放在lib文件夹下:

另外在share\coin\doc\Ipopt文件夹下存放了ipopt_addlibs_*.txt文件,这几个文件描述了使用ipopt库时需要链接的库有哪些:

在使用时可以将lib和include文件夹直接复制到工程目录中,配置好包含目录以及附加库即可。

我已经把编译好的静态库传到GitHub上了,在Visual Studio 2015 及 Intel Parallel Studio XE 2018环境下编译的,编译器不同可能会不好用。有需要的同学可以去下载:https://github.com/hejiangda/IPOPT_3.12_Windows_Static_Library


欢迎关注我的微信公众号 江达小记

windows 下编译 Ipopt 3.12相关推荐

  1. Windows下编译tensorflow-gpu教程

    这两个也要看: https://zhuanlan.zhihu.com/p/29029860 https://zhuanlan.zhihu.com/p/34942873 Windows下编译tensor ...

  2. Windows下编译TensorFlow1.3 C++ library及创建一个简单的TensorFlow C++程序

    参考:https://www.cnblogs.com/jliangqiu2016/p/7642471.html Windows下编译TensorFlow1.3 C++ library及创建一个简单的T ...

  3. windows下编译支持https的curl

    先编译好openssl,过程详见:<windows下编译openssl> 编译好zlib,过程详见<windows下编译zlib> 1. 下载curl 官网:https://c ...

  4. 在Windows下编译FFmpeg详细说明

    在Windows下编译FFmpeg详细说明 MinGW:一个可自由使用和自由发布的Windows特定头文件和使用GNC工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行时 Mi ...

  5. windows 下编译libcurl,通过url下载图片数据

    windows 下编译libcurl 因为linux平台采用了libcurl,有一个程序移植到到windows平台,再linux采用libcurl.在windows下准备也采用该库.在网上搜索了几位同 ...

  6. 记录 Windows 下编译一个开源 SM9 签名验签 C 程序的过程

    注:本文不讨论算法具体实现细节,只介绍如何编译一个现有的程序实现. 在商用密码检测中心( 链接:http://www.scctc.org.cn/index.aspx )的网站上,"下载中心& ...

  7. windows下编译linux内核,windows上可编译Linux内核

    编译过程: 1). 解压后默认的文件夹位置是在D:\Linux-0.11,如果你不是将文件解压到该目录下, 你要修改MinGW32目录下的MinGW32.bat文件,将里面的PATH指向MinGW32 ...

  8. Windows下编译OpenSSL(使用VS2013或VS2008)

    转自https://www.cnblogs.com/findumars/p/4299976.html 简述 OpenSSL是一个开源的第三方库,它实现了SSL(Secure SocketLayer)和 ...

  9. 实战Windows下编译Opencc 1.0.5

    Opencc是中文简繁转换开源项目,支持词汇级别的转换.异体字转换和地区习惯用词转换(中国大陆.台湾.香港). 特点 严格区分「一简对多繁」和「一简对多异」. 完全兼容异体字,可以实现动态替换. 严格 ...

最新文章

  1. Redis初学:5(String类型的基本操作)
  2. 在mysql中怎样设置值唯一_mysql怎么设置行值唯一?
  3. 我在神策做研发丨做冲在前方的第一方队,造中国最好的开源 SDK
  4. 神策数据上线“点击分析”,深度感知用户点击行为
  5. 点点客李新 | 移动社交电商行业案例干货分享
  6. Linux命令----用户管理
  7. Buffers, windows, and tabs
  8. 530并行日:用超算更省心
  9. centos通过添加chrome源来安装chrome
  10. GitHub上已超过2900星!这份有原理、有代码、有Demo的算法资源火了
  11. python基本判断语句_python两种简洁的条件判断语句写法
  12. mac和linux系统配置git tab自动补全
  13. html期末作业代码网页设计——代码质量好-宠物网(8页) HTML+CSS+JavaScript 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
  14. android网易云音乐api接口,网易云音乐API分析
  15. 证券交易系统术语介绍
  16. 【转】GB2312汉字分区及内码表
  17. 网站ICP备案是什么呢?
  18. 产品思维:什么是互联网思维
  19. RxSwift系列—RxSwift核心逻辑
  20. 数据产品经理该懂的python技术

热门文章

  1. 地球超2亿蛋白质结构全预测,AlphaFold引爆「蛋白质全宇宙」!
  2. 软件产品登记证书和软著区别 软件产品登记证书怎么申请
  3. Linux/Ubuntu操作系统及常用命令
  4. 达梦查询锁表解除、锁超时
  5. Mysql数据实时同步实践
  6. 在本地调试crx插件
  7. matlab 非线性规划如何看是否可行解,[MATLAB数学相关] linprog解线性规划问题无可行解,但lindo能解出来...
  8. Docker数据卷和网络管理 下
  9. ckfinder--如何去掉版本提示This is the demo version of CKFinder
  10. Vue 项目中使用 font-awesome