2012-09-20 278 views
0

我自己的共享庫,我有我的CMakeLists.txt尋找我的共享庫下面的代碼libsieve.so包括通過CMake

set(CPPLIB_DIR "${CMAKE_SOURCE_DIR}/../core/build") 
find_library(CPPLIB_SIEVE_LIBRARY NAMES libsieve PATHS CPPLIB_DIR) 

但它失敗,不會找我的媒體庫。我有以下目錄結構:

  • 核心
    • 編譯:libsieve.so
  • 項目:CMakeLists.txt

我在做什麼錯?

回答

1

我不知道爲什麼cmake沒有找到所需的庫,但我可以建議一種方法,讓它發生在幫助cmake-gui:如果第一次運行「配置」找不到圖書館,你可以手動將其指向所需的庫(設置完整的絕對路徑)。大多數情況下,這種解決方案適用於我。

另外,如果該庫是使用一個工具鏈(例如Intel C++)構建的,而且您的項目正在使用另一個工具鏈(如clang)構建,則無法找到該庫可能是由於項目之間的二進制不兼容和圖書館。

Upd。原來的問題是引用CPPLIB_DIR。它應該是:

find_library(CPPLIB_SIEVE_LIBRARY NAMES sieve PATHS ${CPPLIB_DIR}) 
+0

我正在用另一個cmake文件自己構建'libsieve.so'庫。這可能是問題嗎?它看起來像這樣:'set(CMAKE_BUILD_TYPE「Release」)add_library(sieve SHARED Sieve.cpp)' – Reza

+0

當您爲項目使用CMake時,庫是否以libsieve.so編譯對象的形式存在?如果不是,那顯然是問題的原因,因爲CMake實際上並沒有編譯你的代碼,它只是創建makefile。 find_library查找已編譯的對象,如果它現在不存在,它不會發現它。 – Dmitry

+0

是的,當然存在。這是奇怪的事情... – Reza

0

Cmake find_library期望您提供庫名或庫文件名。

通過爲庫名稱添加「lib」前綴來混合兩者。因此,您應該嘗試用sievelibsieve.so替換libsieve

+0

謝謝你的回答。我嘗試過,但沒有奏效。我甚至使用絕對路徑,但仍沒有找到任何庫。 – Reza