METIS:未定义对"METIS_WPartGraphRecursive"的引用
METIS: undefined reference to `METIS_WPartGraphRecursive'
我必须编译一个依赖于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_WPartGraphRecursive
PS:在 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 5.1.0 上的源代码 metis-5.1.0 和 metis-3.0.6 安装,我遇到了同样的问题。 这似乎是一个难以解决的错误,因为许多人在METIS表格的这一页中问同样的问题。
我还尝试在编译命令的末尾添加-lmetis
,如此处建议
作为附加信息,我在METIS源文件夹中进行了grep WPartGraphKway
。在版本 5.1.0 中没有这样的字符串。在 4.0.3 版中有。
我解决了这样做:
- 我安装
metis-3.0
- 我为我的软件运行
cmake
- 我跑
make VERBOSE=1
- 我复制了正在打印的最后一个
gcc
命令 - 我粘贴它,在命令末尾添加
-lmetis
并执行命令
请注意,如果我对metis-5.1.0
重复相同的操作,它不起作用,并且我遇到了与第一篇文章中写的相同的错误。
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 具有默认值的引用获取函数
- 如何使用基类指针引用派生类成员
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- METIS:未定义对"METIS_WPartGraphRecursive"的引用