# Android projet hybride C/C++/Qt

**URL:** <https://www.debian-fr.org/t/android-projet-hybride-c-c-qt/68838>\
**Category:** Programmation\
**Created:** [Mars 24, 2016, 5:47 UTC](https://www.debian-fr.org/t/android-projet-hybride-c-c-qt/68838 "2016-03-24T17:47:43Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Funkygoby](https://www.debian-fr.org/user_avatar/www.debian-fr.org/funkygoby/32/3984_2.png) [@Funkygoby](https://www.debian-fr.org/u/Funkygoby)\
**Post date:** [Mars 24, 2016, 5:47 UTC](https://www.debian-fr.org/t/android-projet-hybride-c-c-qt/68838/1 "2016-03-24T17:47:43Z")

</div>

Salut,  
J’ai réussi à “terminer” mon projet C/Gtk+. C’est à dire qu’il rempli toutes les fonctionnalités pour lequel j’en avais besoin. Je continue de travailler dessus au fur et à mesure de mes découvertes en programmation.  
J’ai séparé en plusieurs fichiers: le coeur du programme, la partie CLI[1] et la partie GUI[2] Gtk+. Mon makefile me permet de produit un binaire CLI uniquement qui tourne sans soucis sur le terminal de mon smartphone (via la cross-compilation).

J’aimerais porter ce programme sous android gràce à Qt, Android SDK, etc… GTK+ ne fournissant pas grand chose de ce coté là…  
Le but est de n’écrire que la partie GUI mais en C++/Qt sans toucher à un cheveux du code C.

-D’abord qu’elle est la meilleure approche pour une cible linux. Est ce que linker coeur.o © à du code C++ est faisable? Créer une librairie [coeur.so](http://coeur.so)? Comment avoir 3 binaires utilisant le même coeur mais présentant une interface différente (cli, Gtk et Qt)?  
-Ensuite, comment cela se passe t’il lors du portage vers android (version Qt uniquement donc)? N’ayant pas encore commencé à jouer avec qtcreator, android sdk/ndk, je voudrais être sûr de pouvoir compiler le C avec le C++ pour android.

Merci à vous.

Par correction:  
[1]: Command Line Interface  
[2]: Graphical User Interface

---

<div class="post-metadata">

**Author:** ![Funkygoby](https://www.debian-fr.org/user_avatar/www.debian-fr.org/funkygoby/32/3984_2.png) [@Funkygoby](https://www.debian-fr.org/u/Funkygoby)\
**Post date:** [Mars 26, 2016, 10:37 UTC](https://www.debian-fr.org/t/android-projet-hybride-c-c-qt/68838/2 "2016-03-26T22:37:14Z")

</div>

Je réponds à ma première question:  
Pour pouvoir accéder à des fonctions de core.o (code C) via du C++, on peut inclure core.h dans des balises: `extern "C" {#include "core.h"}`. Le linker comprendra qu’il s’agit de fonctions C. Ça marche tant qu’aucun mot-clé C++ n’est utilisé dans le header.  
Si, comme moi, vous utilisez des mots clés C++ dans votre code C (dans mon cas, une variable de structure appelée “public”), il faut redéfinir le/les mot-clé problèmatiques juste le temps de l “include” en question:  
`#define public public_alt extern "C" {core.h}`  
`#undef public`  
Le #undef est important puisqu’il permet de rétablir ce mot clé pour la suite du programme. J’accède à ma variable via public\_alt.  
Si votre code C contient beaucoup de noms (variable et/ou fonctions) incompatible avec C++, le mieux est d’écrire une couche intermédiaire qui traduira.

Ces solutions ont l’avantage de ne pas avoir à toucher au code C.

Par rapport à la seconde question, il va falloir que j’attende d’avoir un tél android sous la main. L’émulateur est trop lent sur mon ordi.

---

<div class="post-metadata">

**Author:** ![Funkygoby](https://www.debian-fr.org/user_avatar/www.debian-fr.org/funkygoby/32/3984_2.png) [@Funkygoby](https://www.debian-fr.org/u/Funkygoby)\
**Post date:** [Avril 12, 2016, 6:40 UTC](https://www.debian-fr.org/t/android-projet-hybride-c-c-qt/68838/3 "2016-04-12T18:40:07Z")

</div>

Je réponds finalement à ma 2ème question. La compilation/portage du projet pour android se fait sans problème gràce à QtCreator. Il suffit de suivre la doc (installer et relier android sdk/ndk)  
En revanche pas de fenetre native pour ouvrir les fichiers.  
Il faut passer par Qt Swift si on veut avoir qqchose qui ressemble à du natif, càd se frapper une réécriture.
