2017-08-29 169 views
0

我要編譯依賴於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版本中有。

+1

您確定爲您顯示的可執行文件報告「未解析的引用」,而不是針對其他可執行文件/庫?使用'VERBOSE = 1'選項到'make',可以看到完整的命令行用於編譯和鏈接,並檢查與metis庫的鏈接是否實際執行。 – Tsyvarev

+0

謝謝,我用'VERBOSE = 1'的輸出編輯了這個問題 –

回答

0

我解決這樣做:

  • 我安裝metis-3.0
  • 我跑cmake我的軟件
  • 我跑make VERBOSE=1
  • 我複製最後gcc命令正在打印
  • 我貼吧,我在命令末尾添加-lmetis並執行命令

請注意,如果我重複與metis-5.1.0相同的操作,它不起作用,並且我有與第一篇文章中寫的相同的錯誤。