linux下基于官方源码编译ipopt

1、C++依赖项安装升级

由于需要编译c++所以需要安装一系列的依赖:

apt-get update
apt-get -y upgrade
apt install build-essential
apt-get install -y gcc g++ gfortran git patch wget pkg-config liblapack-dev libmetis-dev libblas-dev vim

2、下载需要编译的代码文件

总共有5个重要的文件包:

1. Ipopt :https://github.com/coin-or/Ipopt.git
2. ThirdParty-ASL : https://github.com/coin-or-tools/ThirdParty-ASL.git
3. ThirdParty-HSL : https://github.com/coin-or-tools/ThirdParty-HSL.git
4. ThirdParty-Mumps : https://github.com/coin-or-tools/ThirdParty-Mumps.git
5. coinhsl.zip : 为ThirdParty-HSL编译的依赖项,其官网为: [Coin-HSL available from STFC IP Store](https://licences.stfc.ac.uk/product/coin-hsl) ,该文件下载比较麻烦且很难查找的到

3、编译文件

  1. 编译ThirdParty-ASL

    cd ThirdParty-ASL || exit
    ./get.ASL
    ./configure
    make
    make install
  2. 编译ThirdParty-HSL

    1. 将coinhsl.zip解压到ThirdParty-HSL

      cp coinhsl.zip ThirdParty-HSL
      cd ThirdParty-HSL || exit
      unzip coinhsl.zip
    2. 编译

      ./configure
      make
      make install
  3. 编译ThirdParty-Mumps

    cd ThirdParty-Mumps || exit
    ./get.Mumps
    ./configure
    make
    make install
  4. 编译Ipopt

    cd Ipopt || exit
    mkdir build
    cd build || exit
    ../configure
    make
    make test
    make install

4、配置环境变量

cd /usr/local/include || exit
cp coin-or coin -r
ln -s /usr/local/lib/libcoinmumps.so.3 /usr/lib/libcoinmumps.so.3
ln -s /usr/local/lib/libcoinhsl.so.2 /usr/lib/libcoinhsl.so.2
ln -s /usr/local/lib/libipopt.so.3 /usr/lib/libipopt.so.3
echo "Add the/usr/local/lib directory to the configuration file of the shared library"
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig

5、一键式操作脚本

  1. 预先下载文件:夸克链接:https://pan.quark.cn/s/8928a21eaf0b
  2. 在文件夹Ipopt_pkg下,存放提供的两个压缩文件:coinhsl.zip ; Ipopt_pkg.zip
  3. 在Ipopt_pkg文件夹的同级地址下执行脚本depoly_ipopt.sh

文件结构树:

-- Ipopt_pkg
- coinhsl.zip
- Ipopt_pkg.zip
-- depoly_ipopt.sh

depoly_ipopt.sh :

#!/bin/bash
echo "Compile ipopt and dependencies:" # echo is used to printf in terminal
echo "dependencies: gcc g++ gfortran git patch wget pkg-config liblapack-dev libmetis-dev libblas-dev"
apt-get update
apt-get -y upgrade
apt install build-essential
apt-get install -y gcc g++ gfortran git patch wget pkg-config liblapack-dev libmetis-dev libblas-dev vim
echo "===========================dependencies: over====================================="
if [ ! -d "/Ipopt_pkg" ]; then
mkdir /Ipopt_pkg
fi
cd Ipopt_pkg || exit
unzip Ipopt_pkg.zip
echo "===========================make ASL==========================="
if [ ! -d "/ThirdParty-ASL" ]; then
git clone https://github.com/coin-or-tools/ThirdParty-ASL.git
fi
cd ThirdParty-ASL || exit
./get.ASL
./configure
make
make install
cd ..
echo "===========================make HSL==========================="
if [ ! -d "/ThirdParty-HSL" ]; then
git clone https://github.com/coin-or-tools/ThirdParty-HSL.git
fi if [ ! -d "/ThirdParty-HSL/coinhsl.zip" ]; then
cp coinhsl.zip ThirdParty-HSL # 将预先下载好的线性求解器编译文件压缩包添加到文件夹ThirdParty-HSL内
fi cd ThirdParty-HSL || exit
unzip coinhsl.zip
./configure
make
make install
cd ..
echo "===========================make Mumps==========================="
if [ ! -d "/ThirdParty-Mumps" ]; then
git clone https://github.com/coin-or-tools/ThirdParty-Mumps.git
fi
cd ThirdParty-Mumps || exit
./get.Mumps
./configure
make
make install
cd ..
echo "===========================make Ipopt==========================="
if [ ! -d "/Ipopt" ]; then
git clone https://github.com/coin-or/Ipopt.git
fi
cd Ipopt || exit
mkdir build
cd build || exit
../configure
make
make test
make install
echo "===========================Improve the environment==========================="
cd /usr/local/include || exit
cp coin-or coin -r
ln -s /usr/local/lib/libcoinmumps.so.3 /usr/lib/libcoinmumps.so.3
ln -s /usr/local/lib/libcoinhsl.so.2 /usr/lib/libcoinhsl.so.2
ln -s /usr/local/lib/libipopt.so.3 /usr/lib/libipopt.so.3
echo "Add the/usr/local/lib directory to the configuration file of the shared library"
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig
echo "===========================Compile ipopt and dependencies: over!==========================="

linux下基于官方源码编译ipopt的更多相关文章

  1. linux下c语言源码编译

    一.源码编译过程   源码  ---> 预处理 ---> 编译 ---> 汇编 ---> 链接 --->执行    我们可以把它分为三部分来完成: ./configure ...

  2. Linux下搭建redis(源码编译)

    [准备环境] Linux centos7 redis下载包  地址:http://www.redis.cn/download.html  前往下载稳定版本 [步骤] 1.下载成功后 把包上传到服务器 ...

  3. nginx在linux下安装(源码编译)

    下载 http://nginx.org/en/download.html 安装 安装依赖 yum -y install gcc gcc-c++ zlib zlib-devel pcre-devel o ...

  4. linux下获取软件源码包 centos/redhat, debian/ubuntu

    linux下获取软件源码包 centos/redhat, debian/ubuntu centos下: 1. yum install yum-utils 主要为了获取yumdownloader 2. ...

  5. Linux 安装node.js ---- 源码编译的方式

    一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-release 2.检查 gcc.gcc-c++ 是否安装过 命令: rpm -q gcc rp ...

  6. Linux下基于官方源代码RPM包构建自定义MySQL RPM包

    rpmbuild时不要以root用户执行! 方法一: 1.首先安装rpmbuild #yum install rpm-build gcc gcc-c++ cmake bison ncurses-dev ...

  7. Win下Jenkins-2.138源码编译及填坑笔记

    源码编译篇 1.  安装JDK1.8-181,操作系统添加JDK环境变量.Java -version验证一下. 注:Jenkins2.138版本,JDK必须jkd1.8.0-101以上,不支持Java ...

  8. linux下对rpm源码手工打补丁

    前言 通常情况rpm包组件管理方式下的linux环境,常用打补丁的方式只有一种:修改spec文件定义的Patch和patch字段,其实spec文件中调用的底层命令还是patch.  因为业务需要要编译 ...

  9. linux软件安装(rpm,源码编译)

    1.rpm(redhat package manager)管理器主要目的在于解决软件的安装.卸载.升级.查询.验证等,例如升级过程中,保留软件的配置文件,安装过程中,检查软件依赖的库文件,以及卸载过程 ...

  10. windows10下如何进行源码编译安装tensorflow

    1.获取python3.5.x https://www.python.org/ftp/python/3.5.4/python-3.5.4-amd64.exe 2.安装python3.5.x,默认安装即 ...

随机推荐

  1. nginx重新整理——————开篇[一]

    前言 因为整理http协议,顺便把nginx 整理了. 正文 主要作用: 正向代理 反向代理(负载均衡.缓存等) 静态资源 nginx 的优点: 适合高并发,一个进程可以处理很多的请求. 扩展性强,有 ...

  2. webpack 打包jquery

    前言 记一次配置webpack jqeury中的案例. 正文 选取自己需要安装的jquery版本号 dependencies:{ //此处的jquery版本根据npm后的版本来看,会有安装版本的提示 ...

  3. kkfileview搭建实战

    kkfileview可以与nginx搭建的文件服务器配合实现预览工作,也可以通过自身的文件系统机制免搭建nginx文件服务器来实现预览工作. nginx 创建nginx # 创建初始容器,获得容器内部 ...

  4. Webpack中Loader和Plugin的区别?编写Loader,Plugin的思路?

    一.区别 前面两节我们有提到Loader与Plugin对应的概念,先来回顾下 loader 是文件加载器,能够加载资源文件,并对这些文件进行一些处理,诸如编译.压缩等,最终一起打包到指定的文件中 pl ...

  5. 力扣615(MySQL)-平均工资:部门与公司比较(困难)

    题目: 给如下两个表,写一个查询语句,求出在每一个工资发放日,每个部门的平均工资与公司的平均工资的比较结果 (高 / 低 / 相同). 表: salary employee_id 字段是表 emplo ...

  6. 面试题45(Java)-把数组排成最小的数(中等)

    题目: 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. 示例 1: 输入: [10,2] 输出: "102" 示例 2: 输入: [ ...

  7. 力扣442(java)-数组中重复的数据(中等)

    题目: 给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 .请你找出所有出现 两次 的整数,并以数组形式返回. 你必须设 ...

  8. 一年增加 1.2w 星,Dapr 能否引领云原生中间件的未来?

    简介: 虽然 Dapr 在国外有很高的关注度,但在国内知名度非常低,而且现有的少量 Dapr 资料也偏新闻资讯和简单介绍,缺乏对 Dapr 的深度解读.在 Dapr v1.0 发布之际,我希望可以通过 ...

  9. Python静态类型解析工具简介和实践

    简介: Python是一门强类型的动态类型语言,开发者可以给对象动态指定类型,但类型不匹配的操作是不被允许的.动态类型帮助开发者写代码轻松愉快,然而,俗话说:动态一时爽,重构火葬场.动态类型也带来了许 ...

  10. Dijkstra迪杰斯特拉求最短路和最短路的条数和各个点权值的最大值

    作为一个城市的紧急救援队队长,你会得到一张你所在国家的特殊地图. 该地图显示了由一些道路连接的几个分散的城市. 地图上标出了每个城市的救援队伍数量以及任意两个城市之间每条道路的长度. 当其他城市接到紧 ...