【问题标题】:METIS: undefined reference to `METIS_WPartGraphRecursive'METIS:对“METIS_WPartGraphRecursive”的未定义引用
【发布时间】:2018-02-07 13:01:25
【问题描述】:

我必须编译一个依赖 METIS 库的软件,但是它的 CMake 东西是通过禁用所有需要 METIS 的地方来编写的。现在,我必须再次重新启用该代码,因此该代码现在取决于 METIS。

我从源代码安装了metis-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 中,我尝试使用 metis-5.1.0、metis-4.0.3 并使用 sudo apt-get install libmetis-dev 进行安装。在后一种情况下,我找到libmetis.so 而不是libmetis.a,但在这种情况下,cmake 也正确识别,链接器正确查找,但最后我得到相同的错误。

我还尝试了sudo apt-get install libmetis-dev,在 Ubuntu 14.04 上从源代码 metis-5.1.0 和 metis-3.0.6 安装,我遇到了同样的问题。 这似乎是一个难以解决的错误,因为许多人在 METIS 论坛的this page 中提出了同样的问题。

我也尝试在编译命令末尾添加-lmetis,建议here

作为附加信息,我在 METIS 源文件夹中做了一个grep WPartGraphKway。在 5.1.0 版本中没有这样的字符串。在 4.0.3 版本中有。

【问题讨论】:

  • 您确定您显示的可执行文件报告了“未解析的引用”,而不是另一个可执行文件/库吗?将VERBOSE=1 选项设置为make,您可能会看到用于编译和链接的完整命令行,并检查是否实际执行了与metis 库的链接。
  • 谢谢,我用VERBOSE=1的输出编辑了这个问题

标签: c++ cmake linker-errors undefined-reference metis


【解决方案1】:

我解决了这个问题:

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

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

【讨论】:

    猜你喜欢
    • 2011-03-27
    • 2022-01-22
    • 2016-04-04
    • 2015-11-03
    • 2011-08-11
    • 2019-07-22
    • 2015-07-20
    • 2019-06-22
    • 2012-04-02
    相关资源
    最近更新 更多