METIS: неопределенная ссылка на 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
, установка из источника metis-5.1.0 и metis-3.0.6 на Ubuntu 14.04 и у меня была такая же проблема. Это кажется труднопреодолимой ошибкой, так как многие люди задают один и тот же вопрос на этой странице формы METIS.
Я также попытался добавить -lmetis
в конце команды компиляции, как предложено здесь
В качестве дополнительной информации я сделал grep WPartGraphKway
в исходной папке METIS. В версии 5.1.0 такой строки нет. В версии 4.0.3 есть.
1 ответ
Я решил сделать это:
- Я устанавливаю
metis-3.0
- я бегу
cmake
для моего программного обеспечения - я бегу
make VERBOSE=1
- Я копирую последний
gcc
команда печатается - Я вставляю это, я добавляю в конце команды
-lmetis
и выполнить команду
Обратите внимание, что если я повторяю ту же операцию с metis-5.1.0
, это не работает, и у меня та же ошибка, что я написал в первом посте.