8
votes

Compiler stand seul exe avec cygwin

Je veux faire un exe autonome avec Cygwin. J'ai deux options:

  1. lien staticly link cygwin1.dll
    Si je peux lier statiquement Cygwin1.dll, alors je peux obtenir un exe autonome.

  2. fusion de cygwin1.dll avec myProg.exe
    Si je peux fusionner Cygwin1.dll avec mon programme, je peux obtenir un exe autonome.

    Ne suggère pas que j'utilise ilmmerge. Cela ne fonctionnera pas car je n'ai pas compilé mon programme avec .NET.

    est-ce que l'une de ces options est possible? Sinon, y a-t-il quelque chose qui est possible avec ce dilemme? Merci!


2 commentaires

Je suppose que vous avez réellement besoin de services de Cygwin.dll, et simplement utiliser -Mno-Cygwin (ou Mingw) ne fonctionnera pas pour vous?


Je ne sais pas. J'utilise GCJ, mais je ne pouvais pas obtenir le GCJ qui est venu avec Mingw pour travailler.


3 Réponses :


3
votes

Je peux voir deux possibilités que vous pourriez considérer raisonnables. Il serait nécessaire de construire un talon exécutable avec un autre compilateur (par exemple, Mingw - peu importe, il suffit de ne pas avoir besoin de Cygwin) pour déballer l'exécutable principal et Cygwin.dll dans un répertoire temporaire, puis republier. Pour ne distribuer qu'un seul exécutable, vous souhaitez ajouter l'exécutable principal et Cygwin.dll au «Stub» comme des ressources binaires. C'est un peu laid, mais assez simple.

L'alternative serait de saisir le Source à Cygwin , et construisez-le comme une bibliothèque statique. Au moins en théorie, cela devrait être plus propre - mais c'est aussi sans aucun doute plus de travail. L'obtenir pour construire comme code purement statique au lieu d'une DLL sera presque certainement du travail, bien qu'il soit difficile de deviner à quel point. Il suffit de naviguer un peu, il semble peu probable que cela soit un travail rapide de quelques heures, ou quelque chose comme ça (à moins qu'il y ait quelque chose que j'ai manqué qui supporte déjà la construction statique, bien sûr).


0 commentaires

3
votes

Essayez de passer -MNO-CYGWIN en tant que compilateur et drapeau de liaison. Si les exigences de votre programme sont suffisamment simples, cela évitera en fonction des bibliothèques Cygwin et de créer un exe autonome.


1 commentaires

D'autres messages ont indiqué que cela ne fonctionne plus, pour des lecteurs plus récents. La fonctionnalité est maintenant obsolète.



1
votes

Réponse plus précise de Jerry.

La procédure décrite ci-dessous doit être confrontée à votre droit des droits et de votre licence! Je sais que cela peut travailler, mais les droits de distribution du résultat (voire exécuter la procédure) peuvent être (et je pense vraiment que sont) délimités par la licence Cygwin. En effet, votre application fera toujours référence à Cygwin (même s'il est inutile - mais est toujours dans votre application)

supposons hello.exe est le nom de votre excellente application compilée Sous Cygwin dans un excellent répertoire de projet C: \ xxx \ yyy \ zzz \

dans la console Cygwin accédez à C: \ xxx \ yyy \ zzz et tapez xxx

Vous obtenez toutes les utilisations de votre application utilisées. Ensuite, copiez c: \ xxx \ yyy \ zzz à toutes les DLL répertoriées et spécifiques pour Cygwin.

Notez que votre application peut appeler d'autres applications (à l'aide de la fonction exécutive par exemple) - - trouver des bibliothèques aplications Utilisez et copiez ces bibliothèques ainsi que ces applications elles-mêmes - à C: \ xxx \ yyy \ zzz .

Vous devrez peut-être recompiler votre projet avec Option de type -LC: \ xxx \ yyy \ zzz ou ainsi. Regardez tous les autres chemins de vos sources.

Ainsi, votre application devient indépendante de l'installation de Cygwin et vous pouvez présenter sa fonctionnalité pour / partager avec / les utilisateurs Windows sans Cygwin. Mais - une fois de plus, je pointe et vous demandez - soyez conscient d'une licence et d'une loi appropriées des créateurs de Cygwin et de les observer!


0 commentaires