2016-10-28 248 views
0

我已經閱讀了關於使用CMake包含.so庫的幾個主題(和文檔),但是在我看來,我並沒有看到我已經讀過的錯誤,即:CMake沒有找到.so庫

  • 提供了不正確的庫名
  • 指定一個不正確的路徑

那我有毛病做什麼?我在Android Studio工作,並且在我的app目錄中有一個cmake文件。它可以找到一些東西,但不是問題的.so文件,其路徑是:

app/src/main/cpp/libusb-android-open2/android/libs/armeabi/libusb1.0.so 

這是我的cmake的文件:

# This succeeds 
add_library(demo-libusb SHARED src/main/cpp/demo-libusb.cpp) 

# This succeeds 
find_library(log-lib log) 
if (log-lib) 
    message(WARNING "HAS loglib") # This message gets printed 
else(log-lib) 
    message(SEND_ERROR "NO loglib") 
endif(log-lib) 

# This fails 
link_directories(src/main/cpp/libusb-android-open2/android/libs/armeabi) 
find_library(usb-lib NAMES usb1.0 libusb1.0.so) 
if (usb-lib) 
    message(WARNING "HAS libusb") 
else(usb-lib) 
    message(SEND_ERROR "NO libusb") # This message gets printed 
endif(usb-lib) 

我也有嘗試:

find_library(usb-lib NAMES libusb1.0.so usb1.0 PATHS 
    src/main/cpp/libusb-android-open2/android/libs/armeabi 
    src/main/cpp/libusb-android-open2/android/libs/armeabi-v7a 
) 
+0

您已閱讀本文[CMake wiki文章](https://cmake.org/Wiki/CMake:How_To_Find_Libraries#Using_external_libraries_that_CMake_doesn.27t_yet_have_modules_for),不是嗎? – agg3l

+0

@ agg3l:我已經看到了,但也許你可以澄清一點,因爲我不清楚如何繼續?首先,我不是在使用一個包,而是使用'.so'文件,我必須自己進行交叉編譯。第二,你能告訴我「LibXML ++ _ LIBRARIES」的含義是什麼嗎?它應該是一個目錄嗎? '.so'文件的列表? – JellicleCat

+0

find_library是否使用PATH的絕對值? –

回答

0

命令link_directories不影響,find_library搜索路徑。

您可以使用PATH提示選項find_library,或一組在其search algorithm明確地指出變量。

+0

謝謝。你的意思是說,例如,運行'cmake'並帶有-DCMAKE_LIBRARY_PATH =/home/markham/DroidEar/app/src/main/cpp/libusb-android-open2/android/libs/armeabi?我已經嘗試過,沒有更好的成功,恐怕。 – JellicleCat

+0

我也嘗試在'find_library'調用中指定'PATHS'和'NAMES'。我已經更新了我的OP,用這些參數表示完整的調用。 – JellicleCat

+1

根據你的另一個評論,你執行*交叉編譯*。看看有關路徑的類似問題:http://stackoverflow.com/questions/40054495/set-cmake-prefix-path-not-working-with-android-toolchain/40080575#40080575。 – Tsyvarev