IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

[Linux][GTK] Portage vers Windows


Sujet :

GTK+ avec C & C++

  1. #1
    Membre averti

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 313
    Points : 354
    Points
    354
    Par défaut [Linux][GTK] Portage vers Windows
    Salutations,

    Je ne suis plus très actif sur le forum, soucis de santé et problèmes personnels à gérer qui prennent du temps :{

    Je suis en train d'essayer de démontrer qu'il est possible de prendre le code portable incluant la librairie GTK3 développée sous Linux et de "simplement" installer la librairie GTK sous Windows et de recompiler pour obtenir exactement les mêmes résultats.
    Il semblerait que ce ne soit aussi simple :{ C'est là que nous saluerons Java et éventuellement .net.

    Apparemment sous Cygwin il n'y a rien de prévu de base pour télécharger des paquets additionnels (comme zypper, apt-get sous Linux).
    Sous MSys2, c'est mieux, mais ça ne marche pas... déjà il n'y a rien qui fonctionne "une fois installé", il faut spécifier à la main comment pkg-config fonctionne, en ajoutant une variable d'environnement dans bash.bashrc :{

    Ensuite à la compilation, il semblerait que les posix threads ne soient pas pris en compte dans MSys2 ce qui est tout de même très embarrassant et puis concernant GTK3 voici le genre d'erreurs qui indiquent peut-être que GTK3 est en 32bits au lieu de 64bits :{
    En fait, je n'ai jamais eu ce type d'erreur donc je me renseigne, mais ça m'a tout l'air d'être un soucis lié à la taille des registres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    hurukan@VirtualWin7 MSYS /gtkarduino
    # make
    cc `pkg-config --libs gtk+-3.0`  `pkg-config --cflags gtk+-3.0`  gtkarduino.c detecterarduino.c   -o gtkarduino
    gtkarduino.c: Dans la fonction «*main*»:
    gtkarduino.c:134:2: attention: déclaration implicite de la fonction «*pthread_create*»; vouliez-vous utiliser «*g_thread_create*»*? [-Wimplicit-function-declaration]
      134 |  pthread_create(&detecter,NULL,(void*)&thread_detecter,NULL);
          |  ^~~~~~~~~~~~~~
          |  g_thread_create
    gtkarduino.c: Dans la fonction «*thread_detecter*»:
    gtkarduino.c:188:3: attention: déclaration implicite de la fonction «*sleep*» [-Wimplicit-function-declaration]
      188 |   sleep(1);
          |   ^~~~~
    gtkarduino.c:190:2: attention: déclaration implicite de la fonction «*pthread_exit*»; vouliez-vous utiliser «*g_thread_exit*»*? [-Wimplicit-function-declaration]
      190 |  pthread_exit(NULL);
          |  ^~~~~~~~~~~~
          |  g_thread_exit
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x52)*: référence indéfinie vers «*gtk_init_abi_check*»
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x52): relocalisation tronquée pour concorder avec la taille*: R_X86_64_PC32 vers le symbole indéfini gtk_init_abi_check
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x5c)*: référence indéfinie vers «*gtk_window_new*»
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x5c): relocalisation tronquée pour concorder avec la taille*: R_X86_64_PC32 vers le symbole indéfini gtk_window_new
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x83)*: référence indéfinie vers «*gtk_window_set_default_size*»
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x83): relocalisation tronquée pour concorder avec la taille*: R_X86_64_PC32 vers le symbole indéfini gtk_window_set_default_size
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x9a)*: référence indéfinie vers «*gtk_window_set_resizable*»
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x9a): relocalisation tronquée pour concorder avec la taille*: R_X86_64_PC32 vers le symbole indéfini gtk_window_set_resizable
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0xb1)*: référence indéfinie vers «*gtk_window_set_position*»
    Bon déjà les erreurs affichées en français ça craint (les traductions sont souvent approximatives et victimes de faux-amis) et puis c'est frustrant d'être parti d'une hypothèse qui s'avère incorrecte :{
    'faudrait que j'essaye sur un "vrai windows" sans passer par la machine virtuelle, perdant de ce fait la possibilité de faire des comparaisons avec le projet initial qui fonctionne magnifiquement sous Linux.

    Au pire si g_thread_create() fonctionne de la manière que pthread_create() je trouverais sans doute une solution (workaround) par contre concernant les erreurs à l'édition des liens... je suis pas certain de mon coup.

    Ma/mes question(s):

    Je sais que Cygwin, pour l'avoir essayé l'année passée, est "POSIX compliant" donc ça devrait fonctionner avec pthread_create() cependant je n'ai trouvé aucun moyen d'ajouter GTK3 dans l'environnement Cygwin :{

    1. Comment résoudre le soucis de "truncated relocation" indiqué par l'éditeur de liens.
    2. Comment installer quelque chose de similaire à "pacman" de MSys2 sur Cygwin ?

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 431
    Points : 43 057
    Points
    43 057
    Par défaut
    Regardes si tu as pas un paquet genre gtk3-dev depuis l'installeur cygwin
    Pour pthread, regardes ceci.

    pacman semble inclus avec MSYS2.

    Sinon, essayes peut-être de compiler avec MinGW.

    Pour le prob. de truncated relocation, t'aurais pas des bibliothèques 32 bits et d'autres 64 bits ?
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Membre averti

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 313
    Points : 354
    Points
    354
    Par défaut
    Librairies 32bits/64bits (comme annoncé)

    Oui, je ne sais pas vraiment vérifier les versions 32/64bits sous Windows: ldd et consors ne semblent pas disponibles, je vais vérifier cela quand j'en aurais le temps ^^

    Pour les threads, c'est vrai que je pars toujours du principe que -lpthread est ajouté par défaut dans la procédure de compilation comme c'est le cas sous Linux :{ Du coup je vais modifier mon makefile pour ajouter la librairie :{

    Merci pour le coup de main, je vais bien finir par m'en sortir ^^

  4. #4
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Citation Envoyé par hurukan Voir le message
    Salutations,
    Je suis en train d'essayer de démontrer qu'il est possible de prendre le code portable incluant la librairie GTK3 développée sous Linux et de "simplement" installer la librairie GTK sous Windows et de recompiler pour obtenir exactement les mêmes résultats.
    Il semblerait que ce ne soit aussi simple :{ C'est là que nous saluerons Java et éventuellement .net.
    Bin, je l'ai déjà fait (certes pour des applis de base), et ça marchait pas mal.

    Citation Envoyé par hurukan Voir le message
    Apparemment sous Cygwin il n'y a rien de prévu de base pour télécharger des paquets additionnels (comme zypper, apt-get sous Linux).
    Sous MSys2, c'est mieux, mais ça ne marche pas... déjà il n'y a rien qui fonctionne "une fois installé", il faut spécifier à la main comment pkg-config fonctionne, en ajoutant une variable d'environnement dans bash.bashrc :{
    Pour Cygwin je ne sais pas, je préfère rester sur du natif Windows autant que possible, donc je privilégie toujours MSYS2. MSYS2 te crée un shell avec un environnement au poil pour déveloper. Rien à rajouter dans le bashrc.

    Citation Envoyé par hurukan Voir le message
    Ensuite à la compilation, il semblerait que les posix threads ne soient pas pris en compte dans MSys2 ce qui est tout de même très embarrassant et puis concernant GTK3 voici le genre d'erreurs qui indiquent peut-être que GTK3 est en 32bits au lieu de 64bits :{
    En fait, je n'ai jamais eu ce type d'erreur donc je me renseigne, mais ça m'a tout l'air d'être un soucis lié à la taille des registres.
    Il faut juste installer les bons paquets 32 ou 64 bits de GTK+, tu as la plateforme cible dans le nom du paquet: mingw-w64-x86_64-gtk3
    Cf. "step2" dans https://www.gtk.org/download/windows.php#MSYS2

    Citation Envoyé par hurukan Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    hurukan@VirtualWin7 MSYS /gtkarduino
    # make
    cc `pkg-config --libs gtk+-3.0`  `pkg-config --cflags gtk+-3.0`  gtkarduino.c detecterarduino.c   -o gtkarduino
    gtkarduino.c: Dans la fonction «*main*»:
    gtkarduino.c:134:2: attention: déclaration implicite de la fonction «*pthread_create*»; vouliez-vous utiliser «*g_thread_create*»*? [-Wimplicit-function-declaration]
      134 |  pthread_create(&detecter,NULL,(void*)&thread_detecter,NULL);
          |  ^~~~~~~~~~~~~~
          |  g_thread_create
    gtkarduino.c: Dans la fonction «*thread_detecter*»:
    gtkarduino.c:188:3: attention: déclaration implicite de la fonction «*sleep*» [-Wimplicit-function-declaration]
      188 |   sleep(1);
          |   ^~~~~
    gtkarduino.c:190:2: attention: déclaration implicite de la fonction «*pthread_exit*»; vouliez-vous utiliser «*g_thread_exit*»*? [-Wimplicit-function-declaration]
      190 |  pthread_exit(NULL);
          |  ^~~~~~~~~~~~
          |  g_thread_exit
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x52)*: référence indéfinie vers «*gtk_init_abi_check*»
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x52): relocalisation tronquée pour concorder avec la taille*: R_X86_64_PC32 vers le symbole indéfini gtk_init_abi_check
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x5c)*: référence indéfinie vers «*gtk_window_new*»
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x5c): relocalisation tronquée pour concorder avec la taille*: R_X86_64_PC32 vers le symbole indéfini gtk_window_new
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x83)*: référence indéfinie vers «*gtk_window_set_default_size*»
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x83): relocalisation tronquée pour concorder avec la taille*: R_X86_64_PC32 vers le symbole indéfini gtk_window_set_default_size
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x9a)*: référence indéfinie vers «*gtk_window_set_resizable*»
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0x9a): relocalisation tronquée pour concorder avec la taille*: R_X86_64_PC32 vers le symbole indéfini gtk_window_set_resizable
    /tmp/ccKSJCJy.o:gtkarduino.c:(.text+0xb1)*: référence indéfinie vers «*gtk_window_set_position*»
    Bon déjà les erreurs affichées en français ça craint (les traductions sont souvent approximatives et victimes de faux-amis) et puis c'est frustrant d'être parti d'une hypothèse qui s'avère incorrecte :{
    Tu lui dis d'utiliser pour la commande qui suit sur la ligne (ici make) la locale C (les chaines de caractères qui se trouvent dans le code, sans aucune traduction).

    Citation Envoyé par hurukan Voir le message
    'faudrait que j'essaye sur un "vrai windows" sans passer par la machine virtuelle, perdant de ce fait la possibilité de faire des comparaisons avec le projet initial qui fonctionne magnifiquement sous Linux.

    Au pire si g_thread_create() fonctionne de la manière que pthread_create() je trouverais sans doute une solution (workaround) par contre concernant les erreurs à l'édition des liens... je suis pas certain de mon coup.

    Ma/mes question(s):

    Je sais que Cygwin, pour l'avoir essayé l'année passée, est "POSIX compliant" donc ça devrait fonctionner avec pthread_create() cependant je n'ai trouvé aucun moyen d'ajouter GTK3 dans l'environnement Cygwin :{

    1. Comment résoudre le soucis de "truncated relocation" indiqué par l'éditeur de liens.
    2. Comment installer quelque chose de similaire à "pacman" de MSys2 sur Cygwin ?
    Toujours pas d'avis pour cygwin. Pour le reste, je te conseille de lâcher ton makefile et de passer à meson: https://mesonbuild.com/
    Ce sera beaucoup plus facile de gérer des dépendances qui peuvent varier entre Windows et Linux.
    Exemple avec la libmath (souvent à part sous Linux, et intégrée sous Windows): https://mesonbuild.com/howtox.html#a...ry-lm-portably
    Documentation officielle GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels GTK+ 3:
    GTK en C, GTK en Python

    Tutoriels par l'exemple (platform-demos):
    GTK (tous langages)

  5. #5
    Membre averti

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 313
    Points : 354
    Points
    354
    Par défaut
    Merci !!
    Désolé, je participe à tellement de forums que je m'y perds un peu, des fois je poste deux fois le même thread sur deux forums différents et du coup...

    J'ai changé de machine la mienne est morte (de profondis) en septembre, le temps de réinstaller tout les OS, les logiciels, récupérer mes données perso et trier les m**** qui ne servent plus à rien, je suis de retour (plus ou moins)

    Je vais installer MSYS2 sur une machine native, tenter de me mettre bien avec un environnement de développement style linux sous Windows (d'où l'intérêt de développer sous Windows ?) et essayer de revenir plus vite sur ce thread
    pour indiquer où j'en suis.

Discussions similaires

  1. Portage Appli Windows vers linux (C++)
    Par magic-moad dans le forum C++
    Réponses: 5
    Dernier message: 14/04/2010, 15h14
  2. Problème portage code Linux vers Windows
    Par scary dans le forum Windows
    Réponses: 14
    Dernier message: 11/01/2010, 17h56
  3. problème portage ioctl socket Linux vers Windows
    Par progfou dans le forum Réseau
    Réponses: 19
    Dernier message: 06/10/2009, 19h44
  4. Problème de portage Linux vers Windows, wxwidgets
    Par zoom* dans le forum wxWidgets
    Réponses: 6
    Dernier message: 22/07/2008, 09h59
  5. Portage vers Windows à l'aide de cygwin
    Par bdaone dans le forum Windows
    Réponses: 1
    Dernier message: 21/05/2007, 09h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo