2016-10-28 3 views
0

Ich habe mehrere Threads (und Dokumente) auf einschließlich .so Bibliotheken mit CMake gelesen, aber es scheint mir nicht, dass ich in die Fehler gefallen bin, die ich gelesen habe, nämlich :CMake nicht finden .so Bibliothek

  • einen falschen Namen Bibliothek liefert
  • Angabe einer falschen Pfad

Also, was ich verkehrt mache? Ich arbeite in Android Studio, und ich habe eine cmake-Datei in meinem Verzeichnis app. Es kann einige Dinge finden, aber nicht die .so-Datei in Frage, deren Pfad:

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

Hier ist meine cmake-Datei:

# 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) 

ich auch versucht:

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

Sie haben das gelesen [CMake Wiki-Artikel] (https://cmake.org/Wiki/CMake:How_To_Find_Libraries#Using_external_libraries_that_CMake_doesn.27t_yet_have_modules_for), nicht wahr? – agg3l

+0

@ agg3l: Ich habe das gesehen, aber vielleicht könntest du ein wenig aufklären, da ich nicht weiß, wie es weitergehen soll? Erstens arbeite ich nicht mit einem Paket, sondern mit einer '.so' Datei, die ich selbst kompilieren musste. Zweitens, kannst du mir sagen, was die Bedeutung von LibXML ++ _ BIBLIOTHEKEN ist? Soll es ein Verzeichnis sein? Eine Liste von '.so' Dateien? – JellicleCat

+0

Arbeitet find_library mit absoluten Werten für PATH? –

Antwort

0

Befehl link_directorieswirkt sich nicht auf auf find_library Suchpfade.

können Sie verwenden PATH oder TIPP Optionen für find_library oder Variablen gesetzt, die in ihrer search algorithm ausdrücklich vermerkt sind.

+0

Danke. Meinst du zum Beispiel, 'cmake' mit einem' -DMAKE_LIBRARY_PATH =/home/markham/DroidEar/app/src/main/cpp/libusb-android-open2/android/libs/armeabi' zu betreiben? Ich habe das mit keinem besseren Erfolg versucht, fürchte ich. – JellicleCat

+0

Ich habe auch versucht, 'PATHS' und' NAMES' in meinem Aufruf 'find_library' anzugeben. Ich habe mein OP aktualisiert, um den vollständigen Anruf mit diesen Parametern anzuzeigen. – JellicleCat

+1

Laut einem anderen Kommentar führen Sie * Cross-Compiling * durch. Sehen Sie sich ähnliche Fragen zu Pfaden an: http://stackoverflow.com/questions/40054495/set-cmake-prefix-path-not-working-with-android-toolchain/40080575#40080575. – Tsyvarev