2017-10-20 31 views
0

J'ai une application simple window, construite avec MSYS2, que je veux pouvoir exécuter en dehors du shell MSYS2 MinGW, juste en double-cliquant sur l'application.Exécution d'une application GTK + construite avec MSYS2 en double-cliquant simplement

Le problème est que lorsque je veux exécuter l'application, il doit être par l'invite MSYS MinGW sinon il renvoie une erreur.

The code execution cannot proceed because libgio-2.0-0.dll was not found. Reinstalling the program may fix this problem 

J'ai essayé, y compris (en copiant les fichiers à l'emplacement de mon exe) libgio-2.0-0.dll et plus d'erreurs sont apparues en disant bibliothèques ont été portées disparues. J'ai inclus ces fichiers aussi. Je l'ai montré les fichiers que j'inclus ci-dessous:

libffi-6.dll 
libgdk-3-0.dll 
libglib-2.0-0.dll 
libgmodule-2.0-0.dll 
libgtk-3-0.dll 
libgobject-2.0-0.dll 
libgio-2.0-0.dll 
libatk-1.0-0.dll 
libcairo-gobject-2.dll 
libcairo-2.dll 
libepoxy-0.dll 
libpcre-1.dll 
libwinpthread-1.dll 
libgdk_pixbuf-2.0-0.dll 
libpango-1.0-0.dll 

En fin de compte une erreur apparaît disant:

The application was unable to start correctly (0xc000007b). Click OK to close the application. 

I found what the error message means:

Ce particulier le code d'erreur fait référence à un format d'image non valide. Cependant, ce que le code d'erreur signifie généralement, c'est que vous essayez d'exécuter un programme qui est destiné à fonctionner avec un système d'exploitation Windows 64 bits, mais que vous avez seulement un système d'exploitation 32 bits.

Cependant, cela n'aide pas car j'utilise un ordinateur x64. Les DLL sont x64 ainsi que l'exe. GTK + dépend de certaines bibliothèques et en dehors de ce que j'ai fait ci-dessus, je ne trouve aucune solution et je ne trouve aucune documentation sur les dépendances à inclure pour ne pas l'exécuter via l'invite MSYS.

Alors, que dois-je faire pour que ma fenêtre fonctionne? L'application est correcte, il y a un problème avec les dépendances.

Deuxièmement, quelles sont les dépendances que j'ai besoin d'inclure (ou ai-je listé chacune d'elles dans quel cas, ce qui ne va pas avec ma fenêtre) pour le script que j'ai donné?

Enfin, y a-t-il un moyen plus simple que ce que j'essaye de faire pour obtenir toutes les dépendances nécessaires?

Répondre

2

Le système doit pouvoir trouver les bibliothèques partagées. Sur un système Linux, cela se fait via l'éditeur de liens, généralement ld. La configuration pour savoir où les trouver se trouve dans /etc/ld.so.conf et /etc/ld.so.conf.d.

Maintenant, sur Windows, cela n'existe pas. C'est pourquoi la variable d'environnement PATH est couramment utilisée pour cela, et parfois modifiée par les installateurs. Mais changer le PATH pour chaque programme est ennuyeux et interdit la relocalisation (déplacer l'ensemble du répertoire de l'application et l'exécution de l'application d'ailleurs). Vous pouvez donc simplement créer un répertoire vide, y créer un répertoire bin et y copier votre binaire d'application et les bibliothèques GTK +. Cela devrait fonctionner parce que the current directory is searched before the PATH variable sur Windows.

Alors ce que vous avez fait est correct. Les problèmes que vous avez sont similaires à la redistribution de l'application, à savoir. rassembler les bits nécessaires pour distribuer un logiciel sur un autre ordinateur. Ce n'est malheureusement pas la partie la plus documentée sur le site GTK +. Avez-vous essayé avec une application qui n'utilise pas la classe GtkApplication?

+0

À titre expérimental, j'ai copié tout le contenu du dossier 'bin' avec mon application. Double-cliquez dessus et la fenêtre s'ouvre. Un message d'erreur est apparu sur l'écran de la console mais la fenêtre s'est ouverte. Puis j'ai enlevé tous les exe et ça a toujours marché. Et puis toute la DLL sauf celles que j'ai mentionnées plus haut. Il a retourné la même erreur. Cela m'amène à croire qu'un DLL est manquant. Il y a aussi une erreur disant: 'Impossible de trouver l'icône 'window-minimize-symbolic-ltr'. Le thème hicolor 'une idée pour résoudre ce problème? – Simon

+0

OK ouais aucune idée quelle DLL est manquante? – Simon

+0

Utilisez le gestionnaire de paquets 'pacman' pour répertorier les fichiers inclus dans le package GTK +. – liberforce