我必须编译一个依赖于METIS库的软件,但是它的CMake是通过禁用所有需要METIS的地方来编写的。现在,我必须再次启用该代码,因此代码现在依赖于METIS。
我从源代码中安装了metis-5.1.0,并编写了一个CMake模块来查找它(实际上我使用了这一个)。我相应地修改了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_WPartGraphRecursiveP.S.:在Ubuntu17.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,在Ubuntu14.04上安装了metis-5.1.0和metis-3.0.6,我也遇到了同样的问题。这似乎是一个难以解决的错误,因为许多人在METIS格式的此页中都会问同样的问题。
我还尝试在编译命令的末尾添加-lmetis,如建议的这里
作为附加信息,我在METIS源文件夹中做了一个grep WPartGraphKway。在5.1.0版本中,没有这样的字符串。在4.0.3版本中有。
发布于 2017-09-21 01:49:43
我解决了这个问题:
metis-3.0cmakemake VERBOSE=1gcc命令-lmetis的末尾添加并执行命令注意,如果我在metis-5.1.0中重复相同的操作,它就不能工作,而且我的错误与我在第一篇文章中所写的相同。
https://stackoverflow.com/questions/45949819
复制相似问题