2016-10-28 8 views
0

Я читал несколько потоков (и документов), включая библиотеки .so с CMake, но мне не кажется, что я попал в ошибки, о которых я читал, а именно :CMake не находит .so library

  • поставляет неправильное имя библиотеки
  • указав неверный путь

Так что я делаю неправильно? Я работаю в Android Studio, и у меня есть файл cmake в моем каталоге app. Он может найти некоторые вещи, но не .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

Вы прочитали эту статью (статья wiki 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

Command 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

Я также попытался указать 'PATHS' и' NAMES' в моем вызове 'find_library'. Я обновил свой OP, чтобы указать полный вызов с этими параметрами. – JellicleCat

+1

Согласно вашему другому комментарию, вы выполняете * кросс-компиляцию *. Взгляните на аналогичный вопрос о путях: http://stackoverflow.com/questions/40054495/set-cmake-prefix-path-not-working-with-android-toolchain/40080575#40080575. – Tsyvarev