web-dev-qa-db-fra.com

Compilateur croisé C ++ de Windows à Linux

Existe-t-il des outils conviviaux pour effectuer une compilation croisée de Windows vers Linux?

42
neo_x3m

crosstool-ng prend en charge la création de compilateurs croisés avec cygwin Host .

Présentation:

  • Installez cygwin, avec les packages de développement
  • Télécharger crosstool-ng
  • Extraire l'archive tar (tar xvjf crosstool-ng*)
  • Courir ./configure
  • Lorsque configure se plaint d'un outil manquant, revenez à la configuration de cygwin et installez le package correspondant (par exemple flex, libtool, ncurses-devel) Vous aurez besoin au moins des éléments suivants:
    • Devel/gperf
    • Devel/bison
    • Devel/byacc
    • Devel/wget
    • Devel/patch
    • Devel/make (version GNU)
    • Devel/automake 1.10+
    • Libs/libncursesw10
    • Libs/libncursesw10-devel
  • make
  • make install
  • Créez un nouveau répertoire pour construire le compilateur croisé, par ex. /usr/src/cross-linux-gnu-root
  • Activez la prise en charge de la casse à l'échelle du système dans le Registre (voir https://superuser.com/questions/266110/how-do-you-make-windows-7-fully-case-sensitive-with-respect- vers le système de fichiers # answer-84267 )
  • Montez le répertoire sensible à la casse (par exemple mount c:/cygwin/usr/src/cross-linux-gnu-root /usr/src/cross-linux-gnu -o binary,posix=1)
  • Depuis l'intérieur du répertoire de compilation du compilateur croisé, ct-ng menuconfig
  • Dans les menus, définissez l'architecture cible sur x86 (probablement) et sous-architecture à i686 (évite problèmes GCC 4.8 , merci osm0sis), cible le noyau vers linux et cible la bibliothèque C vers glibc, et active le compilateur C++.
  • Pour contourner créer des problèmes 4. , activez également EXPERIMENTAL dans Paths and misc options puis, allez dans Companion tools (au niveau supérieur) et activez Build some companion tools et alors make 3.81 (Merci osm0sis)
  • wget a des problèmes avec les derniers certificats kernel.org, utilisez donc la méthode .wgetrc dans cette réponse acceptée: Comment puis-je corriger les erreurs de certificat lors de l'exécution de wget sur une URL HTTPS dans Cygwin? (Merci osm0sis)
  • Actuellement, 3 correctifs de fichiers sont nécessaires pour éviter d'autres erreurs:
  • ct-ng build

Bien sûr, cela ne vous permettra PAS de créer des applications Linux à partir de Visual Studio. (VS2010 et versions ultérieures vous permettent de construire avec d'autres chaînes d'outils telles que gcc, mais vous auriez besoin d'une description de chaîne d'outils appropriée en plus du compilateur croisé créé par crosstool-ng). Mais vous aurez un travail g++-linux-gnu, que vous pouvez exécuter directement ou à l'aide d'un Makefile.

REMARQUE: la construction du compilateur croisé prend beaucoup de temps. osm0sis a fourni n gcc 4.8.1 préconstruit ici , ainsi que ses notes sur la construction du compilateur croisé (utilisé pour mettre à jour cette réponse).

32
Ben Voigt

Votre meilleur pari est d'utiliser une plateforme multiplateforme IDE comme Code :: Blocks qui peut importer des projets MSVC et générer un Makefile pour Linux, que vous pouvez ensuite exécuter sur un Linux (avec même le même programme si vous le souhaitez).

Ainsi, votre flux de travail ressemblerait alors à ceci:

Code, Compile, and debug on MSVC -> import into Code::Blocks & generate Makefile
-> test compile and debug with GCC
-> copy to Linux with Code::Blocks -> test compile & debug on Linux

C'est un peu obtus, probablement, mais au moins Code :: Blocks s'occupe de beaucoup de ces petits détails avec des choses comme Makefiles, et quoi d'autre.

2
supercheetah

Demandez-vous quelque chose qui peut prendre du code écrit pour s'exécuter sur Windows et le faire fonctionner sur Linux? Il n'y a pas vraiment de compilateur qui fait ça - mais peut-être que vous cherchez Wine ( http://www.winehq.org/ ) qui vous permet d'exécuter des applications Windows sur linux (si elles utilisent des API Wine a réfléchi).

Modifier: Je suppose que votre code utilise des API Windows (Win32, etc.) dans cette réponse. Si vous utilisez uniquement C++ standard et les bibliothèques disponibles sur plusieurs plates-formes, il existe de nombreuses autres réponses.

2
Austin Lamb

Je ne crois pas qu'il existe de compilateurs qui vous permettent de compiler sur Windows, puis de prendre le binaire résultant et de l'exécuter sur une machine Linux. Votre meilleur pari est de mettre en place deux environnements de développement, l'un sur Windows et l'autre sur Linux. Faites l'essentiel de votre développement et de votre débogage dans l'environnement Windows si cela vous convient, puis compilez et testez fréquemment sous Linux pour vous assurer que votre code est vraiment multiplateforme. Vous voudrez également utiliser un système de construction multiplateforme et un cadre de test. Je recommande d'utiliser cmake et Google Test , respectivement.

0
Darryl

Compiler vers Linux à partir de Windows sans utiliser la virtualisation ou le compilateur croisé mais uniquement nativement via coLinux
Créez des fichiers exécutables Linux natifs sans quitter (redémarrer) les fenêtres.
Compilation C/C++ pour Linux sous Windows via Linux coopératif
La commutation la plus rapide entre Windows et Linux via ALT-TAB (aucun redémarrage ni redémarrage nécessaire).

1.Installez coLinux ( http://sourceforge.net/projects/colinux/files/latest/download?source=files )
2.Utilisez l'image du système de fichiers racine coLinux: Ubuntu-9.04-1gb.7z ( http://sourceforge.net/projects/colinux/files/Images%202.6.x%20Ubuntu/Ubuntu% 209.04 / )
3. démarrez coLinux
4.changez la chaîne "archive.ubuntu.com" en "old-releases.ubuntu.com" avec:
Shell> Sudo vi /etc/apt/sources.list
5.Mettez à jour votre configuration:
Shell> Sudo apt-get update
6.Installez deux progiciels pour pouvoir compiler vos programmes:
Shell> Sudo apt-get install build-essential
(c/c ++, compilateurs gcc)
Shell> Sudo apt-get install libmysqlclient15-dev
(mysql dev 5.1)
7.Accès aux répertoires Windows à partir de coLinux
Shell> monter cofs0/mnt/-t cofs
Shell> cd/mnt
8.Compiler
Shell> c ++ your.source.cc -o executable.name

0
Angel T