我要编译依赖于METIS库软件,但其CMake的事情写禁用哪里需要METIS的所有地方。现在,我必须重新启用该代码,因此代码现在取决于METIS。METIS:未定义的引用`METIS_WPartGraphRecursive”
我安装梅蒂斯-5.1.0从源代码,我写了一个CMake的模块找到它(其实我以前this one)。我相应地修改CMakeLists.txt
,基本上把下面几行
find_package(METIS REQUIRED)
if (METIS_FOUND)
include_directories(SYSTEM ${METIS_INCLUDE_PATH})
else (METIS_FOUND)
message (SEND_ERROR "This application cannot compile without METIS")
endif (METIS_FOUND)
,并在年底,
target_link_libraries(<my_executable> ${METIS_LIBRARIES})
的cmake后,似乎一切都很好,因为cmake的打印:
-- Found METIS: /usr/local/include
-- METIS libraries /usr/local/lib/libmetis.a
...
-- Configuring done
-- Generating done
-- Build files have been written to: <mylocation>
不过,我运行make后,我得到
undefined reference to `METIS_WPartGraphKway'
undefined reference to `METIS_WPartGraphRecursive'
我该如何解决?
编辑: 作为一个额外的信息,当我make VERBOSE=1
编译,链接似乎已认准了正确的库,因为它包括/usr/local/lib/libmetis.a
,其对应于cmake的被指定且也存在位置。此外,当我看进库与nm /usr/local/lib/libmetis.a
,我看到:
00000000000001c0 T METIS_WPartGraphKway
00000000000009c0 T METIS_WPartGraphRecursive
P.S:在Ubuntu中17.04,我试图与梅蒂斯-5.1.0,梅蒂斯-4.0.3,并与sudo apt-get install libmetis-dev
安装。在后一种情况下,我找到libmetis.so
,而不是libmetis.a
,但是,也是在这种情况下,这是正确的cmake的认识,正确地寻找由连接器,但最后我得到了同样的错误。
我也试过sudo apt-get install libmetis-dev
,从源头梅蒂斯-5.1.0和梅蒂斯-3.0.6在Ubuntu 14.04安装和我有同样的问题。 这似乎是一个难以解决的错误,因为很多人在METIS formum的this page中提出同样的问题。
我也试图在编译命令的末尾添加-lmetis
,所建议here
作为附加的信息,我在METIS源文件夹做了grep WPartGraphKway
。在版本5.1.0中没有这样的字符串。在4.0.3版本中有。
您确定为您显示的可执行文件报告“未解析的引用”,而不是针对其他可执行文件/库?使用'VERBOSE = 1'选项到'make',可以看到完整的命令行用于编译和链接,并检查与metis库的链接是否实际执行。 – Tsyvarev
谢谢,我用'VERBOSE = 1'的输出编辑了这个问题 –