首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为IPOPT编译HSL (在IPOPT之后)

如何为IPOPT编译HSL (在IPOPT之后)
EN

Stack Overflow用户
提问于 2021-07-09 20:18:46
回答 1查看 81关注 0票数 0

我使用MINGW64按照redme编译HSL (https://www.hsl.rl.ac.uk/ipopt/)。然而,我最终得到了一个错误2 (Makefile:753)。关键命令是

代码语言:javascript
复制
gfortran -shared .libs/libcoinhsl-0.dll.def  common/.libs/deps90.o common/.libs/deps.o common/.libs/dump.o mc19/.libs/mc19d.o ma27/.libs/ma27d.o ma28/.libs/ma28d.o ma57/.libs/ma57d.o hsl_ma77/.libs/hsl_ma77d.o hsl_ma77/C/.libs/hsl_ma77d_ciface.o hsl_ma86/.libs/hsl_ma86d.o hsl_ma86/C/.libs/hsl_ma86d_ciface.o hsl_mc68/C/.libs/hsl_mc68i_ciface.o hsl_ma97/.libs/hsl_ma97d.o hsl_ma97/C/.libs/hsl_ma97d_ciface.o loadmetis/.libs/loadmetis.o   -L/mingw64/lib/ -lopenblas -lpthread -lgfortran  -O2 -Wl,-rpath -Wl,/mingw64/lib   -o .libs/libcoinhsl-0.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libcoinhsl.dll.a

输出为

代码语言:javascript
复制
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: common/.libs/deps90.o:C:\msys64\home\user\hsl_solo\coinhsl/common/deps90.f90:17672: undefined reference to `metis_nodend_'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: common/.libs/deps90.o: in function `__hsl_mc68_integer_MOD_mc68_order_integer':
C:\msys64\home\user\hsl_solo\coinhsl/common/deps90.f90:17454: undefined reference to `metis_nodend_'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ma57/.libs/ma57d.o: in function `ma57ad_':
C:\msys64\home\user\hsl_solo\coinhsl/ma57/ma57d.f:469: undefined reference to `metis_nodend_'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\msys64\home\user\hsl_solo\coinhsl/ma57/ma57d.f:682: undefined reference to `metis_nodend_'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\msys64\home\user\hsl_solo\coinhsl/ma57/ma57d.f:618: undefined reference to `metis_nodend_'
collect2.exe: error: ld returned 1 exit status

由于我没有编译软件的经验,有人知道如何修复这个错误吗?

EN

回答 1

Stack Overflow用户

发布于 2021-08-13 14:59:17

Symbol metis_nodend_属于梅蒂斯。metis_nodend_符号需要通过链接到Metis库(你可能需要指定在哪里找到它,通过一些配置标志),通过在运行时加载Metis库的同名函数(这就是loadmetis试图做的),或者通过同名的不做任何事情的伪函数(这是旧版本的HSL过去做的事情)来解析。

HSL的loadmetis是用C语言实现的,并定义了一个函数METIS_NODEND

代码语言:javascript
复制
void METIS_NODEND(int *nvtxs, int *xadj, int *adjncy, int *numflag,
      int *options, int *perm, int *iperm) {
....

因此,问题可能是命名约定不匹配,即C对象中的functionname与Fortran对象期望的functionname不匹配。

尝试在loadmetis.c中将METIS_NODEND更改为metis_nodendmetis_nodend_

或者尝试来自https://github.com/coin-or-tools/ThirdParty-HSL/的buildsystem

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68316667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档