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