2017-08-29 170 views
0

我要编译依赖于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版本中有。

+1

您确定为您显示的可执行文件报告“未解析的引用”,而不是针对其他可执行文件/库?使用'VERBOSE = 1'选项到'make',可以看到完整的命令行用于编译和链接,并检查与metis库的链接是否实际执行。 – Tsyvarev

+0

谢谢,我用'VERBOSE = 1'的输出编辑了这个问题 –

回答

0

我解决这样做:

  • 我安装metis-3.0
  • 我跑cmake我的软件
  • 我跑make VERBOSE=1
  • 我复制最后gcc命令正在打印
  • 我贴吧,我在命令末尾添加-lmetis并执行命令

请注意,如果我重复与metis-5.1.0相同的操作,它不起作用,并且我有与第一篇文章中写的相同的错误。