我正在尝试使用 Cygwin 在 Windows 中编译 IPOPT 3.13.3。我有一份 Intel Parallel Studio 2019 的副本,我正在尝试使用此安装中的 Intel 编译器和 Intel MKL。这是我的过程:
- 启动 Intel 编译器 64 位命令提示符
- 运行 Cygwin.bat 以启动 cygwin bash 终端。然后我可以确认 ifort 和 icl 在路径上并将运行
- 导航到 ipopt 源文件夹并运行
./configure --enable-mscv
从这里它发现编译器很好,它可以工作,直到尝试从 MKL 获取 lapack:
checking for function dsyev_ in /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_intel_lp64_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_sequential_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_core_dll.lib ... no
checking for function dsyev in /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_intel_lp64_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_sequential_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_core_dll.lib ... no
checking for function DSYEV_ in /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_intel_lp64_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_sequential_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_core_dll.lib ... no
checking for function DSYEV in /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_intel_lp64_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_sequential_dll.lib /cygdrive/c/Program Files (x86)/INTELS~1/COMPIL~1.144/windows/mkl/lib/INTEL6~1/mkl_core_dll.lib ... no
然后它继续检查 cygwin 包中的 blas/lapack (无论如何我都不想这样做),但这也失败了:
checking for lapack.pc and blas.pc... yes
checking for function dsyev_ in -llapack ... no
checking for function dsyev in -llapack ... no
checking for function DSYEV_ in -llapack ... no
checking for function DSYEV in -llapack ... no
configure: WARNING: lapack.pc and blas.pc present, but could not find dsyev when trying to link with it.
checking for function dsyev_ in -llapack -lblas ... no
checking for function dsyev in -llapack -lblas ... no
checking for function DSYEV_ in -llapack -lblas ... no
checking for function DSYEV in -llapack -lblas ... no
configure: error: Required package LAPACK not found.
我尝试使用 --with-lapack 标志手动添加各种库组合,例如此处建议:Linking Ipopt with Intel MKL,但我通常得到相同的结果。这是我尝试的另一个命令:
./configure --enable-msvc --with-lapack=" -L${MKLROOT}/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -lpthread -lm -ldl"
这是输出:
checking for function dsyev_ in -LC:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.1.144\windows\mkl/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -lpthread -lm -ldl ... no
checking for function dsyev in -LC:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.1.144\windows\mkl/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -lpthread -lm -ldl ... no
checking for function DSYEV_ in -LC:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.1.144\windows\mkl/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -lpthread -lm -ldl ... no
checking for function DSYEV in -LC:\Program Files (x86)\IntelSWTools\compilers_and_libraries_2019.1.144\windows\mkl/lib/intel64 -lmkl_intel_lp64 -lmkl_core -lmkl_intel_thread -liomp5 -lpthread -lm -ldl ... no
configure: error: Could not find dsyev in Lapack
我确实担心 MKL 的路径中有空格(呃,Windows!),但我尝试将库复制到另一个路径并链接到该路径并没有改变结果。
我还从 cygwin 目录中删除了 GNU link.exe,以便运行link --version
确认我正在使用 Microsoft 链接器(根据此处的建议:Installing and using IPopt with Cygwin - 甚至更好的选择?
我的互联网研究没有产生更多的答案。如果有人对这里的操作有什么建议,请提前感谢您!