安装过程
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