Calaos, Home Automation Forum
Compilation sur Debian - Printable Version

+- Calaos, Home Automation Forum (https://calaos.fr/forum)
+-- Forum: Utilisation - Installation - Configuration (https://calaos.fr/forum/forumdisplay.php?fid=4)
+--- Forum: Installation du système (https://calaos.fr/forum/forumdisplay.php?fid=5)
+--- Thread: Compilation sur Debian (/showthread.php?tid=133)



Compilation sur Debian - tiramiseb - 01-30-2014

Salut,

Comme certains le savent, j'ai installé Debian sur mon Mele A2000G, en version stable.

J'y ai compilé les paquets pour Enlightenment (en utilisant les sources provenant d'unstable), ça m'a pris de longues heures.

Je tente maintenant de compiler calaos_base. Sur l'issue que j'avais ouvert sur GitHub (https://github.com/calaos/calaos_base/issues/25), naguirre/captainigloo a indiqué qu'avec GCC 4.7 ça pose problème. En effet, ça pose problème.

J'ai déjà patché de la manière suivante :

Code:
diff --git a/src/bin/calaos_server/JsonApiClient.cpp b/src/bin/calaos_server/JsonApiClient.cpp
index ef70fc8..aac7586 100644
--- a/src/bin/calaos_server/JsonApiClient.cpp
+++ b/src/bin/calaos_server/JsonApiClient.cpp
@@ -173,6 +173,11 @@ JsonApiClient::JsonApiClient(Ecore_Con_Client *cl):
         http_parser_init(parser, HTTP_REQUEST);
         parser->data = this;

+        // moved initialization to the constructor
+        parse_done = false;
+        has_field = false;
+        has_value = false;
+
         Utils::logger("network") << Priority::DEBUG << "JsonApiClient::JsonApiClient("
                                  << this << "): Ok" << log4cpp::eol;
}
diff --git a/src/bin/calaos_server/JsonApiClient.h b/src/bin/calaos_server/JsonApiClient.h
index 6f4544e..eb58adb 100644
--- a/src/bin/calaos_server/JsonApiClient.h
+++ b/src/bin/calaos_server/JsonApiClient.h
@@ -45,7 +45,7 @@ using namespace Calaos;
                         http_parser_settings parser_settings;
                         http_parser *parser;

-                        bool parse_done = false;
+                        bool parse_done;
                         unsigned char request_method;
                         unordered_map<string, string> request_headers;

@@ -58,7 +58,7 @@ using namespace Calaos;
                         void CloseConnection();

                         //for parsing purposes
-                        bool has_field = false, has_value = false;
+                        bool has_field, has_value;
                         string hfield, hvalue;
                         string bodymessage;
                         string parse_url;

J'espère n'avoir pas fait de connerie, vu que je n'ai jamais fait de C++ je n'ai aucune certitude.

Je rencontre maintenant l'erreur suivante, que je ne sais pas "corriger". Quelqu'un pourrait me guider ?

Code:
JsonApiClient.cpp: In member function ‘json_t* JsonApiClient::buildJsonRoomIO(Calaos::Room*) [with T = Calaos::Input, json_t = json_t]’:
JsonApiClient.cpp:463:81:   instantiated from here
JsonApiClient.cpp:407:22: error: no matching function for call to ‘Calaos::Room::get_size()’
JsonApiClient.cpp:407:22: note: candidates are:
./Room.h:78:21: note: template<class T, typename std::enable_if<std::is_same<T, Calaos::Input*>::value, void>::type* <anonymous> > int Calaos::Room::get_size()
./Room.h:82:21: note: template<class T, typename std::enable_if<std::is_same<T, Calaos::Output*>::value, void>::type* <anonymous> > int Calaos::Room::get_size()
JsonApiClient.cpp:410:44: error: no matching function for call to ‘Calaos::Room::get_io(int&)’
JsonApiClient.cpp:410:44: note: candidates are:
./Room.h:86:19: note: template<class T, typename std::enable_if<std::is_same<T, Calaos::Input*>::value, void>::type* <anonymous> > T Calaos::Room::get_io(int)
./Room.h:90:19: note: template<class T, typename std::enable_if<std::is_same<T, Calaos::Output*>::value, void>::type* <anonymous> > T Calaos::Room::get_io(int)
JsonApiClient.cpp: In member function ‘json_t* JsonApiClient::buildJsonRoomIO(Calaos::Room*) [with T = Calaos::Output, json_t = json_t]’:
JsonApiClient.cpp:464:83:   instantiated from here
JsonApiClient.cpp:407:22: error: no matching function for call to ‘Calaos::Room::get_size()’
JsonApiClient.cpp:407:22: note: candidates are:
./Room.h:78:21: note: template<class T, typename std::enable_if<std::is_same<T, Calaos::Input*>::value, void>::type* <anonymous> > int Calaos::Room::get_size()
./Room.h:82:21: note: template<class T, typename std::enable_if<std::is_same<T, Calaos::Output*>::value, void>::type* <anonymous> > int Calaos::Room::get_size()
JsonApiClient.cpp:410:44: error: no matching function for call to ‘Calaos::Room::get_io(int&)’
JsonApiClient.cpp:410:44: note: candidates are:
./Room.h:86:19: note: template<class T, typename std::enable_if<std::is_same<T, Calaos::Input*>::value, void>::type* <anonymous> > T Calaos::Room::get_io(int)
./Room.h:90:19: note: template<class T, typename std::enable_if<std::is_same<T, Calaos::Output*>::value, void>::type* <anonymous> > T Calaos::Room::get_io(int)



RE: Compilation sur Debian - raoulh - 01-30-2014

Salut,

Oula... Compiler direct sur la mele.... Aouch... ca doit prendre des plombes :p

Par contre j'ai une mauvaise nouvelle, tu ne pourras pas compiler avec gcc plus vieux que 4.8. Meme en changant le code, il y a trop de code dépendant des nouvelles fonctions du C++11, et celles-ci ne sont que supportés a partir de gcc 4.8

Désolé...

Tu as meilleurs temps d'utiliser Calaos-OS, et de le compiler toi meme si tu veux un truc spécifique.


RE: Compilation sur Debian - tiramiseb - 01-30-2014

À tout hasard, est-ce que je peux tenter compiler Calaos avec GCC 4.8 alors que les libs ont été compilées avec GCC 4.7 ou alors ça ne marchera pas ?
(je suis un peu largué sur ces aspects, au fond de ma mémoire il y a des trucs comme quoi il faut que soft et libs aient été compilés avec le même compilateur mais je ne sais pas ce qu'il en est en réalité)

C'est basé sur quoi, Calaos-OS ?
Je veux que mon Mele ne fasse pas que serveur domotique, je souhaite pouvoir le gérer comme n'importe lequel de mes serveurs, y installer d'autres services, etc... c'est pourquoi je me suis tourné vers Debian.


RE: Compilation sur Debian - raoulh - 01-30-2014

@tiramiseb, cf ma reponse sur github Wink

Calaos os c'est basé sur openembedded. Ce qu'il faut voir c'est que la mele c'est une carte embarqué. Il faut un os optimisé pour, pour pouvoir en tirer le meilleur parti. Ce que debian ne peut pas faire, c'est une distro generaliste pour du serveur et des machines de type PC...

Il faut aussi garder a l'esprit qu'une mele ne fera pas tourner pleins de service en parallele. C'est un tout petit CPU avec peu de ressources... Ce qu'il faut pour calaos.


RE: Compilation sur Debian - tiramiseb - 01-30-2014

Quote:Il faut aussi garder a l'esprit qu'une mele ne fera pas tourner pleins de service en parallele. C'est un tout petit CPU avec peu de ressources...

Mon Zaurus faisait tourner plusieurs services en parallèle, et il était largement moins puissant que ne l'est un Mele Smile




Je suis quand même tenté d'essayer de passer sur Jessie... sauf si tu peux me dire que ça ne vaut pas le coup.
J'aime bien l'idée d'avoir la même distro partout...

Et puis si ça ne marche pas, bah OpenEmbedded me rappellera des souvenirs, après tout c'est sur OpenZaurus que j'avais fait tourner "plusieurs services en parallèle"... Big Grin


RE: Compilation sur Debian - tiramiseb - 02-02-2014

Pour info, j'ai décidé de me simplifier la vie, je vais installer Calaos OS et donc (ré)utiliser OpenEmbedded Smile

Tant pis pour la compilation sur Debian...