Fichier exécutable généré à l'aide de GCC sous cygwin
Je suis avec Cygwin et ont GCC (version 4.3.4 20090804 (libération) 1 ) installé Cygwin paquet.
Quand j'ai construit un code C avec GCC sous Cygwin shell, l'exécutable généré le fichier de sortie est un fichier exécutable de type (PE32 exécutable pour MS Windows (console) 80386 d'Intel 32 bits) et il ne peut être exécuté/exécuter sous Cygwin shell, pas comme autonome .exe sur Windows shell/invite de commandes. Si j'essaie de le lancer autonome sur invite de commande Windows, il donne une fenêtre d'erreur disant: "Le programme ne peut pas s'exécuter parce que cygwin.dll est absent de votre ordinateur".
- Comment peut-on rendre cette .exe autonome, qui peut être exécuté sur une invite de commande de tout autre système ou même dans mon propre système?
- Je pensais que GCC sous Cygwin serait de construire un exécutable Linux (ELF 32-bit LSB executable), mais c'est pas le cas. Comment puis-je utiliser gcc-cygwin association pour générer un *.hors genre de Linux fichier exécutable?
- Aussi, je ne peux pas lancer un Linux exécutable généré sur un Linux-gcc combinaison d'exécuter sous Cygwin.
Tous les pointeurs serait utile.
OriginalL'auteur goldenmean | 2010-11-10
Vous devez vous connecter pour publier un commentaire.
En dépit de la généralisation des rumeurs, Cygwin n'est pas un émulateur Linux, c'est à dire qu'il ne veut pas les produire ou de les exécuter Linux exécutables. Pour cela, vous aurez besoin d'une machine virtuelle ou les commandes colinux.
Au lieu de cela, Cygwin est une couche de compatibilité, qui vise à mettre en œuvre, autant que possible, de la POSIX et Linux Api de Windows. Cela signifie que les programmes doivent être compilés spécifiquement pour Cygwin, mais cela signifie aussi qu'il est mieux intégré à Windows, par exemple, il vous permet de mixer POSIX et les Api Windows dans le même programme.
C'est l'cygwin1.dll qui fournit la couche de compatibilité. Si vous construisez non-Cygwin exécutables à l'aide de gcc-3-mno-cygwin d'interrupteur ou de l'un des MinGW compilateurs, alors bien sûr vous ne pouvez pas utiliser POSIX/Linux des Api spécifiques, et ces appels doivent être remplacés avec Windows équivalents.
La construction d'un exécutable Windows sur Linux nécessite un compilateur croisé. En d'autres termes, vous avez besoin d'invoquer un compilateur différent; les options ne seront pas faire. Certaines distributions de Linux ont MinGW paquets, les gcc est appelé i686-pc-mingw32-gcc ou quelque chose du genre. Mais encore une fois, si votre programme utilise POSIX/Linux fonctions, vous ne serez pas en mesure de le construire avec un compilateur MinGW sans modifications. Compilateurs croisés pour la construction de Cygwin programmes sur Linux existent également, mais je ne pense pas que toutes les distributions navire avec un.
OriginalL'auteur ak2
Cygwin est une couche d'émulation. Il permet UNIX code à exécuter sur Windows, si vous compilez pour utiliser la couche d'émulation. Pour Windows, il ressemble à n'importe quel normale DLL et rend les OS des appels comme d'habitude. Mais lorsque vous compilez contre, elle montre les mêmes fonctions que UNIX (bien, POSIX techniquement, mais UNIX il est)
1) Lorsque vous créez avec cygwin, il amène automatiquement dans ce cygwin1.dll. C'est le code que vous avez besoin pour la faire ressembler à UNIX. Il y a des drapeaux de faire ne pas utiliser cette dll cygwin, ignorer le sens UNIX trucs et natif de Windows appels. le
-mno-cygwin
drapeau de rendre le binaire Windows natif binaire, ne pas utiliser cygwin émulation. Comme d'autres l'ont dit, vous avez également besoin-mwindows
de faire de véritables applications à interface graphique en utilisant cygwin gcc.2) Pour compiler sur une plate-forme pour exécuter sur une autre plate-forme, vous avez besoin de ce qu'on appelle un compilateur croisé. Vous avez également besoin des bibliothèques et en-têtes pour l'autre système. Pour ce que vous voulez, vous auriez besoin d'un cygwin-Linux cross compilateur, Linux les en-têtes et les bibliothèques. Il serait sans doute beaucoup plus facile à faire tourner Linux dans une machine virtuelle que cette mise en place.
3) Rappelez-vous que Cygwin ressemble UNIX to UNIX
source
code, de ne pas les binaires Linux. Une fois que vous compilez les choses, les appels de fonction sont des DLL de windows appels. Un cygwin programme est un programme Windows (qui est pourquoi vous avez besoin d'un style Windows DLL pour l'exécuter). Cygwin fournit le code pour UNIX/fonctions d'appels système fork(), mais même la méthode d'appel est maintenant différente. fork() appelle maintenant dans une DLL de Windows, pas dans un noyau Linux. C'est toujours un système très différent.OriginalL'auteur Rich Homolka
Pas une réponse complète, mais je pense que je suis en mesure de donner quelques conseils.
1) http://www.cygwin.com/cygwin-ug-net/programming.html dit que vous devriez utiliser -mswindows paramètre. Prendre un coup d'oeil de MinGW.
2) Vous avez besoin d'une croix de gcc pour ce faire. Par défaut cygwin produit par gcc binaires liés à l'encontre de cygwin.dll.
3) Que parce que c'est un binaire linux. Manière la plus facile est de recompiler le logiciel dans cygwin.
OriginalL'auteur Ahe
ad 1) Il existe actuellement trois différents mingw de la croix-compilateurs disponibles pour cygwin:
L'ancien gcc3 -mno-cygwin est obsolète.
Il y a de nouveaux mingw64 compilateurs croisés pour la version 32 bits (mingw64-i686-gcc) et 64 bits de windows cibles (mingw64-x86_64-gcc).
Il n'y a pas de mingw-i686-gcc correspondance officielle cygwin gcc4 compilateur encore.
ad 2) Il n'y a pas de version linux de cross-compilateur environnement cygwin encore disponibles. Mais les gens avec succès la construction d'un tel cross-compilateur par eux-mêmes.
ad 3) Il n'y a pas de cygwin cross-compilateur comme package linux disponibles, mais de nombreux mingw compilateurs croisés. Ceux mingw exécutables peuvent également être exécutés sous cygwin, mais ils ne peuvent pas utiliser cygwin fonctionnalités, juste de la simple exécution de windows.
À corriger les erreurs d'autres personnes de messages:
-mswindows
n'est pas valide,-mwindows
indique à l'éditeur de liens pour générer une interface graphique app sans console.-mno-cygwin
n'est valable que pour l'ancien obsolète gcc3 compilateur et n'est pas supportée. Ne l'utilisez pas. Avec cygwin, vous devriez utiliser l'ordinaire de l'hôte et la cible triples comme avec tous les autres cross-compilateur.OriginalL'auteur rurban
Vous avez besoin d'avoir cygwin.dll dans votre chemin.
Ou simplement l'utiliser MinGW pour compiler en code natif windows sans dépendances.
Vous pouvez essayer le
-mno-cygwin
option de compilateur, mais j'ai lu quelque part qu'il a été supprimé à partir des versions plus récentes de Cygwin.Oui, c'gcc avec l'option semble avoir disparu Quand j'ai essayé de l'utiliser a donné "gcc:- mno-cygwin drapeau a été supprimé; d'utiliser mingw ciblées cross-compilateur". Merci. Alors maintenant, j'ai besoin d'utiliser compilateur MingW sous cygwin au lieu de gcc, est-il?
Je dirais que oui, et il est BEAUCOUP plus rapide que cygwin (compilation, pas la sortie). Il est aussi facile à installer que la version récemment. Look pour mingw-get sur la page des téléchargements. Edit: Non, vous n'avez pas besoin de Cygwin, MinGW a sa propre coquille, ou vous pouvez simplement le programme d'installation de votre CHEMIN et de l'utiliser à partir de l'invite de commande Windows, si vous n'avez pas besoin de shell fonctionnalité.
Merci. Tous les pointeurs sur mon OP Question 2 et 3 ?
OriginalL'auteur leppie