Ipopt-3.12.7在ubuntu18.04安装

安装过程

1、下载Ipopt-3.12.7包

点此下载

在这里插入图片描述
2、安装依赖

sudo apt-get install libblas3 libblas-dev liblapack3 liblapack-dev gfortran build-essential cppad gcc g++

3、安装HSL

1)去注册并下载源码

2)解压缩后重命名为coinhsl,放到Ipopt-3.12.7/ThirdParty/HSL/coinhsl目录下

4、安装第三方库

cd Ipopt-3.12.7/ThirdParty/ASL
./get.ASL
cd ../Blas
./get.Blas
cd ../Lapack
./get.Lapack
cd ../Metis
./get.Metis
cd ../Mumps
./get.Mumps
cd ../../

如执行./get.Mumps遇到无法下载的情况,可以直接拷贝最后蓝奏云盘内的Mumps文件夹覆盖原来的文件夹即可。

5、编译

mkdir build
cd build
#使用intel编译器
../configure --prefix=/usr/local/ ADD_CFLAGS=-fopenmp ADD_FFLAGS=-fopenmp ADD_CXXFLAGS=-fopenmp --with-blas="-L$MKLROOT/lib/intel64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lm"
#或者其他
../configure

make -j4

6、测试是否编译成功

make test

#成功显示如下:
Testing AMPL Solver Executable...
    Test passed!
Testing C++ Example...
    Test passed!
Testing C Example...
    Test passed!
Testing Fortran Example...
    Test passed!

7、安装

sudo make install

8、防止报错

cd ~/Ipopt-3.12.7
$ sudo cp -a include/* /usr/include/.  
$ sudo cp -a lib/* /usr/lib/.
sudo ldconfig 

有些版本在安装过程中已经执行了这个操作,中间目录可以不复制,但是一定要运行最后一句

9、测试案例

测试案例下载

解压后运行

mkdir build
cd build
cmake ..
make
./solver

如果成功则显示下面的解
在这里插入图片描述

自用的ipopt3.12.7安装相关的包打包到一起:

https://wwd.lanzoue.com/iGkPJ0enmdmf
密码:9q84

安装过程中遇到的错误

1、cppad错误

/home/robot/Desktop/ipopt_example-master/example.cpp:1:10: fatal error: cppad/ipopt/solve.hpp: No such file or directory
    1 | #include <cppad/ipopt/solve.hpp>

此种错误有两个原因,一个是cppad没装,这种最好解决,直接安装即可

sudo apt-get install cppad

第二种可能是ipopt没有安装成功,再重新尝试上述过程

2、sed:-e 报错

sed:-e 表达式 #1,字符 10:未终止的“s”命令

不要用自己配置的conda虚拟环境,可能会出现这个错误

3、GLIBCXX报错

libstdc++.so.6: version `GLIBCXX_3.4.29' not found

解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found 的报错

4、libmkl_intel_lp64.so.2报错

/usr/bin/ld: warning: /usr/lib/gcc/x86_64-linux-gnu/7/libstdc++.so: unsupported GNU_PROPERTY_TYPE (5) type: 0xc0010001
/usr/bin/ld: warning: /usr/lib/gcc/x86_64-linux-gnu/7/libstdc++.so: unsupported GNU_PROPERTY_TYPE (5) type: 0xc0010002
/usr/bin/ld: warning: libmkl_intel_lp64.so.2, needed by /usr/local/lib/libipopt.so, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libmkl_sequential.so.2, needed by //usr/local/lib/libcoinhsl.so.1, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libmkl_core.so.2, needed by //usr/local/lib/libcoinhsl.so.1, not found (try using -rpath or -rpath-link)
//usr/local/lib/libcoinhsl.so.1:对‘dswap_’未定义的引用
/usr/local/lib/libipopt.so:对‘dpotrf_’未定义的引用
/usr/local/lib/libipopt.so:对‘dgemm_’未定义的引用
//usr/local/lib/libcoinhsl.so.1:对‘dtpmv_’未定义的引用
/usr/local/lib/libipopt.so:对‘dnrm2_’未定义的引用
/usr/local/lib/libipopt.so:对‘dscal_’未定义的引用
//usr/local/lib/libcoinhsl.so.1:对‘dtrsv_’未定义的引用
//usr/local/lib/libcoinhsl.so.1:对‘sswap_’未定义的引用
/usr/local/lib/libipopt.so:对‘dpotrs_’未定义的引用
/usr/local/lib/libipopt.so:对‘dppsv_’未定义的引用
/usr/local/lib/libipopt.so:对‘dtrsm_’未定义的引用
//usr/local/lib/libcoinhsl.so.1:对‘stpsv_’未定义的引用
//usr/local/lib/libcoinhsl.so.1:对‘dtrmm_’未定义的引用
/usr/local/lib/libipopt.so:对‘daxpy_’未定义的引用
/usr/local/lib/libipopt.so:对‘dgetrf_’未定义的引用
//usr/local/lib/libcoinhsl.so.1:对‘ssyrk_’未定义的引用
//usr/local/lib/libcoinhsl.so.1:对‘dtpsv_’未定义的引用
/usr/local/lib/libipopt.so:对‘dcopy_’未定义的引用
/usr/local/lib/libipopt.so:对‘idamax_’未定义的引用
/usr/local/lib/libipopt.so:对‘pardiso_’未定义的引用
//usr/local/lib/libcoinhsl.so.1:对‘isamax_’未定义的引用
//usr/local/lib/libcoinhsl.so.1:对‘saxpy_’未定义的引用
//usr/local/lib/libcoinhsl.so.1:对‘sgemm_’未定义的引用
/usr/local/lib/libipopt.so:对‘dsyrk_’未定义的引用
/usr/local/lib/libipopt.so:对‘dasum_’未定义的引用
/usr/local/lib/libipopt.so:对‘dsyev_’未定义的引用
//usr/local/lib/libcoinhsl.so.1:对‘dtrmv_’未定义的引用
/usr/local/lib/libipopt.so:对‘dgetrs_’未定义的引用
/usr/local/lib/libipopt.so:对‘pardisoinit_’未定义的引用
//usr/local/lib/libcoinhsl.so.1:对‘strsm_’未定义的引用
/usr/local/lib/libipopt.so:对‘ddot_’未定义的引用
//usr/local/lib/libcoinhsl.so.1:对‘sgemv_’未定义的引用
/usr/local/lib/libipopt.so:对‘dsymv_’未定义的引用
//usr/local/lib/libcoinhsl.so.1:对‘scopy_’未定义的引用
/usr/local/lib/libipopt.so:对‘dgemv_’未定义的引用
collect2: error: ld returned 1 exit status
CMakeFiles/solver.dir/build.make:96: recipe for target 'solver' failed
make[2]: *** [solver] Error 1
CMakeFiles/Makefile2:82: recipe for target 'CMakeFiles/solver.dir/all' failed
make[1]: *** [CMakeFiles/solver.dir/all] Error 2
Makefile:90: recipe for target 'all' failed
make: *** [all] Error 2

把libmkl_intel_lp64.so.2文件所在路径写入.bashrc文件当中

export LD_LIBRARY_PATH=/opt/intel/oneapi/mkl/2022.2.0/lib/intel64

https://github.com/UMich-BipedLab/Cassie_CFROST
https://github.com/qianqian121/ipopt_example
https://www.coin-or.org/CppAD/Doc/doxydoc/html/index.html

猜你喜欢

转载自blog.csdn.net/qq_43309940/article/details/127514067
今日推荐