pip install METIS

python 的包 METIS 需要在本地安装 METIS,METIS 本身又是依赖 GKlib 的,所以需要首先编译 GKlib,然后编译 METIS

编译 GKlib

make config CONFIG_FLAGS='-D BUILD_SHARED_LIBS=ON -D CMAKE_INSTALL_PREFIX=/home/hongyu_gao2001/GKlib'

编译 METIS

make config shared=1 cc=gcc prefix=/home/hongyu_gao2001/METIS gklib_path=/home/hongyu_gao2001/GKlib

这里 gklib_path 或许是重要的,不知道不加能不能行

undefined symbol

编译后执行 python 程序报错 libmetis.so: undefined symbol: gk_jbufs

ldd libmetis.so 会发现并没有 libGKlib.so

$ ldd libmetis.so 

linux-vdso.so.1 (0x00007fff1b54c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x000079f3f6980000)
/lib64/ld-linux-x86-64.so.2 (0x000079f3f6bf9000)

最终的解决方案来自这里

实际做的处理就是向 libmetis/CMakeLists.txt 中添加了一句 target_link_libraries(metis GKlib)

然后 ldd 的结果中就应该会包含 libGKlib.so

ldd libmetis.so 

linux-vdso.so.1 (0x00007ffe573f8000)
libGKlib.so => /home/hongyu_gao2001/GKlib/lib/libGKlib.so (0x00007f8291508000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f82912d6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8291594000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f82911ef000)

所以实际原因应该就是即使 GKlib 正确安装了,但是还链接上,不过这个问题很神奇,因为我明明看到编译指令中是包含 -lGKlib 的,但是最后居然没有链接上。

posted @ 2024-07-20 11:45  0x7F  阅读(38)  评论(0编辑  收藏  举报