Gestiona les dependències de C++ amb Clickable

Si una aplicació depèn d’una biblioteca que no està preinstal·lada a Ubuntu Touch, l’aplicació ha d’enviar-la dins del paquet de clics. Aquesta guia mostra com es pot fer això amb Clickable.

Edifici

De vegades les biblioteques estan disponibles pre-construïdes, permetent-vos ometre el pas de construcció. No obstant això, és recomanable recopilar la seva dependència, ja que li dona més control sobre tot el procés i pot conduir a millors resultats (per exemple, un millor rendiment o mides de paquet més petites).

ubicació

Poseu el codi font de la biblioteca a libs/LIBNAME (substituint LIBNAME pel nom de la biblioteca), perquè aquí és on es pot fer clic per defecte. Si el codi font de dependències està disponible com a repositori git, és una bona idea afegir-lo com a git submodule. Altrament, afegiu un script per a baixar les fonts.

Afegiu una secció de biblioteques a al vostre clickable.yaml, així:

 builder: "cmake"
 libraries:
   LIBNAME:
     builder: "cmake"

Si la biblioteca no conté una configuració del CMake, haureu d’utilitzar el qmake o en canvi el constructor custom.

Opcionalment, configureu la compilació afegint build_args, que pot ser que sigui així:

 builder: "cmake"
 libraries:
   LIBNAME:
     builder: "cmake"
     build_args:
     - "-DBUILD_EXAMPLES=OFF"
     - "-DBUILD_DOCS=OFF"
     - "-DBUILD_TESTS=OFF"
     - "-DBUILD_SHARED_LIBS=OFF"

La majoria d’arguments de construcció són específics del projecte. Per tant, estudieu les instruccions de construcció de la biblioteca i també cerqueu la configuració option en els seus CMakeLists.txt.

Per a construir realment la biblioteca per a totes les arquitectures, executeu clickable build --libs --arch armhf, clickable build --libs --arch arm64 i clickable build --libs --arch amd64. No us oblideu d’esmentar aquest pas en el vostre README, perquè altres puguin reproduir el procés de construcció.

Vegeu com Teleports clickable.yaml utilitza la característica de biblioteques per a construir la seva tdlib de dependències.

Preconstruït

Si heu compilat la vostra biblioteca com s’ha descrit anteriorment, ometeu aquest pas.

Una biblioteca compilada prèviament normalment només està disponible com un objecte compartit que ha d’estar enllaçat dinàmicament. A més, pot contenir components que no necessites, donant lloc a una aplicació inflada. Fins i tot pot perdre alguna cosa que es podria aconseguir mitjançant la compilació de si mateix. De vegades, una biblioteca està disponible als repositoris d’Ubuntu, però no és instal·lable per a l’arquitectura que necessiteu (probablement armarmhf o orarm64). En aquest cas cal compilar la biblioteca tal com s’ha descrit anteriorment.

Si la biblioteca està disponible als repositoris de l’Ubuntu, podeu afegir-la a la llista de dependències, així:

 builder: "cmake"
 dependencies_target:
 - "libsomething-dev"

Clickable instal·larà automàticament el paquet especificat per a l’arquitectura de destinació dins del contenidor de construcció. Un exemple es pot trobar a Guitar Tools clickable.json.

Si la biblioteca es pot trobar en un PPA, també podeu afegir el PPA al clickable.yaml. Per exemple:

 builder: "cmake"
 dependencies_ppa:
 - "ppa:someone/libsomething"
 dependencies_target:
 - "libsomething-dev"

Altrament, afegiu un script per a baixar la biblioteca preconstruïda.

Usar

En primer lloc, heu d’especificar el directori d’inclusió on es poden trobar les capçaleres que incloeu al codi font de l’aplicació. En segon lloc, heu d’enllaçar el binari de la biblioteca amb el binari de l’aplicació.

En cas que la biblioteca contingui un fitxer de configuració del CMake, podeu utilitzar l’ordre find_package, que us proporciona un objectiu per enllaçar amb o variables que apunten al binari de la biblioteca i incloure directoris. Les línies addicionals en els vostres CMakeLists.txt llavors poden semblar:

find_package(SOMELIBRARY REQUIRED)

include_directories(${SOMELIBRARY_INCLUDE_DIRS})
target_link_libraries(mytarget ${SOMELIBRARY_LIBS})

L’ordre findpackage normalment defineix el camí al directori d’inclusió com SOMELIBRARY_INCLUDE_DIRS i els binaris de la biblioteca com SOMELIBRARY_LIBS (consulteu la documentació de la biblioteca sobre el que proporciona exactament la seva configuració de CMake). Utilitzeu-los amb les ordres include_directories i target_link_libraries. Vegeu el fitxer Camera Scanner ImageProcessing CMakeLists.txt per a un exemple del món real.

En aquest punt ja hauríeu de poder provar amb el mode d’escriptori Clickable executant clickable desktop.

Desplegament

Si has enllaçat la biblioteca de forma estàtica, pots ometre aquest pas, ja que el binari de la biblioteca ja està dins del binari de la teva aplicació.

Esbrineu quins fitxers d’objecte compartit (*.so) heu d’enviar. Podeu fer-ho iniciant l’app al vostre dispositiu a través de clickable && clickable logs. Heu de veure un missatge d’error que us digui quin fitxer d’objecte compartit mancava.

Trobeu el camí als fitxers d’objecte compartit. Per a les biblioteques construïdes via clickable, es troben en algun lloc del directori d’instal·lació de la biblioteca, que es troba dins del directori de construcció de la biblioteca per defecte (p. ex. build/arm-linux-gnueabihf/opencv/install). Per a les biblioteques construïdes prèviament, executeu clickable run "find / -name 'libSomething.so'" (substituint libSomething.so pel fitxer que esteu cercant). Això hauria d’imprimir el camí al fitxer (juntament amb alguns missatges d’error que podeu ignorar). En general, /usr/lib és una bona aposta a l’hora de cercar els fitxers d’objecte compartit.

Per a obtenir els fitxers al paquet de clics, afegiu la tecla install_lib al vostre clickable.yaml:

 builder: "cmake"
 libraries:
   LIBNAME:
     builder: "cmake"
     install_lib:
     - "$LIBNAME_LIB_INSTALL_DIR/usr/lib/$ARCH_TRIPLET/libqmapboxgl.so*"
     - "/usr/lib/$ARCH_TRIPLET/libSoundTouch.so.*"

Les línies anteriors contenen dos exemples. La primera instal·lació d’una biblioteca construïda amb Clickable. L’asterisc a .so* ajuda a agafar enllaços simbòlics juntament amb la biblioteca real que s’utilitza per apuntar a la versió actual.

Depenent de la biblioteca, és possible que hàgiu d’enviar algunes dades addicionals. En aquest cas, consulteu les instruccions de lectura o instal·lació de la biblioteca.

Hauríeu d’estar configurat per a construir i instal·lar el paquet de clics en un dispositiu connectat a l’ordinador ara executant clickable.