我要編譯依賴於METIS庫軟件,但其CMake的事情寫禁用哪裏需要METIS的所有地方。現在,我必須重新啓用該代碼,因此代碼現在取決於METIS。METIS:未定義的引用`METIS_WPartGraphRecursive」
我安裝梅蒂斯-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,我試圖與梅蒂斯-5.1.0,梅蒂斯-4.0.3,並與sudo apt-get install libmetis-dev
安裝。在後一種情況下,我找到libmetis.so
,而不是libmetis.a
,但是,也是在這種情況下,這是正確的cmake的認識,正確地尋找由連接器,但最後我得到了同樣的錯誤。
我也試過sudo apt-get install libmetis-dev
,從源頭梅蒂斯-5.1.0和梅蒂斯-3.0.6在Ubuntu 14.04安裝和我有同樣的問題。 這似乎是一個難以解決的錯誤,因爲很多人在METIS formum的this page中提出同樣的問題。
我也試圖在編譯命令的末尾添加-lmetis
,所建議here
作爲附加的信息,我在METIS源文件夾做了grep WPartGraphKway
。在版本5.1.0中沒有這樣的字符串。在4.0.3版本中有。
您確定爲您顯示的可執行文件報告「未解析的引用」,而不是針對其他可執行文件/庫?使用'VERBOSE = 1'選項到'make',可以看到完整的命令行用於編譯和鏈接,並檢查與metis庫的鏈接是否實際執行。 – Tsyvarev
謝謝,我用'VERBOSE = 1'的輸出編輯了這個問題 –