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

C Discussion :

Compiler soit sur Linux, soit sur Windows


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut Compiler soit sur Linux, soit sur Windows
    Bonjour, je ne sais pas si je suis dans le bon topic mais puisque je travaille en C, peut être que oui.

    Voilà ma question concerne une commande pour le préprocesseur qui me retourne les librairies pour windows si je suis sur windows ou idem pour Linux.

    Je ne vois pas d'où viens mon erreur ...

    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
    #ifndef LOPENGL_H
    #define LOPENGL_H
     
    #include <stdio.h> 
    #include <stdlib.h>
    #include <stdbool.h>
     
    #ifdef defined(__gnu__linux__) || defined(__linux__)
    	printf( "You are on a Linux platform\n" );
    	#include <GL/glut.h> // GLUT, includes glu.h and gl.h
    	#include <stdio.h>
     
    #elif WIN32    /* Only defined on Windows platforms */
    	printf( "You are on a Windows platform\n" );
    	#include <windows.h>  // For MS Windows
    	#include <GL/freeglut.h>
    	#include <GL/GL.h>
     
    #else 
    	printf( "You are on an other platform\n" );
    #error "OS not supported!"
     
    #endif
    Voici le message d'erreur quand je compile main sur Linux (main a comme en-tête #include "LOpenGL.h") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    LOpenGL.h:8:15: warning: extra tokens at end of #ifdef directive
     #ifdef defined(__gnu__linux__) || defined(__linux__)
                   ^
    LOpenGL.h:20:10: error: expected declaration specifiers or ‘...’ before string constant
      printf( "You are on an other platform\n" );
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    LOpenGL.h:21:2: error: #error "OS not supported!"
     #error "OS not supported!"
      ^~~~~
    In file included from main.c:1:0:
    LOpenGL.h:1:0: error: unterminated #ifndef
     #ifndef LOPENGL_H
    Par contre, ce programme fonctionne très bien :

    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
    #include <stdio.h>          
     
     
    int main() {
     
    #ifdef WIN32    /* Only defined on Windows platforms */
        printf( "You are on a Windows platform\n" );
    #elif defined(__gnu__linux__) || defined(__linux__)
        printf( "You are on a Linux platform\n" );
    #else           /* Probably a Unix/Linux platform */
        printf( "You are on an other platform\n" );
    #endif
     
        return 0;
    }

  2. #2
    Membre du Club
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Voilà ici, je n'ai déjà plus qu'une erreur dans ma LOpenGL.h mais je ne la comprend pas.


    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
    #ifndef LOPENGL_H
    #define LOPENGL_H
     
    #include <stdio.h> 
    #include <stdlib.h>
    #include <stdbool.h>
     
    #ifdef __linux__
    	//printf( "You are on a Linux platform\n" );
    	#include <GL/glut.h> // GLUT, includes glu.h and gl.h
     
    #elif WIN32    /* Only defined on Windows platforms */
    	//printf( "You are on a Windows platform\n" );
    	#include <windows.h>  // For MS Windows
    	#include <GL/freeglut.h>
    	#include <GL/GL.h>
     
    #else 
    	//printf( "You are on an other platform\n" );
     
    #endif
    Voici l'en-tête de ma main.c :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "LOpenGL.h"
    #include "SOIL.h"
     
    #define LARGEUR_TILE 16
     
    ...
    Voici le message d'erreur que je ne comprend pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    In file included from main.c:1:0:
    LOpenGL.h:1:0: error: unterminated #ifndef
     #ifndef LOPENGL_H

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    À vue de nez, la solution semble simple Elle se trouve dans cette page Compilation conditionnelle (<- lien vers un cours developpez)


    On ne peut pas utiliser defined avec la directive préprocesseur #ifdef: ce qui semble logique

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Et appeler printf() (ou n'importe quelle autre fonction) en dehors d'une fonction, ça ne peut pas compiler...

  5. #5
    Membre du Club
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    ifndef, if, ifdef veulent dire la meme chose en fait. Il se boucle avec endif ici.

    oui printf dans un batch sans fonction mais dans if / else, ca compile.

    j ai la librairy stdio aussi .. je ne sais pas

    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
    #ifndef LOPENGL_H
    	#define LOPENGL_H
     
    	#include <stdio.h> 
    	#include <stdlib.h>
    	#include <stdbool.h>
     
    	#if defined(__gnu__linux__) || defined(__linux__)
    		#include <GL/glut.h> // GLUT, includes glu.h and gl.h
    		#include <stdio.h>
     
    	#elif WIN32    /* Only defined on Windows platforms */
    		#include <windows.h>  // For MS Windows
    		#include <GL/freeglut.h>
    		#include <GL/GL.h>
     
    	#else 
    		printf( "You are on an other platform\n" );
    	#error "OS not supported!"
     
    	#endif
    #endif
    merci

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par Magnum8760 Voir le message
    ifndef, if, ifdef veulent dire la meme chose en fait. Il se boucle avec endif ici.
    Pas vraiment ... puisqu'avec #ifdef tu ne peux pas utiliser defined.


    Citation Envoyé par Magnum8760 Voir le message
    oui printf dans un batch sans fonction mais dans if / else, ca compile.
    Perdu tu as l'erreur "error: expected declaration specifiers or ‘...’ before string constant"

    Si tu arrives à compiler c'est grâce au cœur du préprocesseur : il supprime tout ce qui ne sert à rien, et remplace les macros.
    Dans ton cas, le cas #else est supprimé et donc jamais compilé

    Et d'ailleurs , c'est la directive #error qui fait office de printf.

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par Magnum8760 Voir le message
    ifndef, if, ifdef veulent dire la meme chose en fait. Il se boucle avec endif ici.
    Citation Envoyé par foetus Voir le message
    Pas vraiment ... puisqu'avec #ifdef tu ne peux pas utiliser defined.
    Ce que veut dire foetus, c'est que « #ifdef defined » est un pléonasme. :-) Il y a trois petites lettres à retirer pour que cela marche…

  8. #8
    Membre du Club
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Voilà ce que j'avais obtenu mais au final j'ai trouvé que ca n'aidait pas à la lisibilité du code ..

    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
    #ifndef LOPENGL_H
    #define LOPENGL_H
     
    	#if defined(__gnu__linux__) || defined(__linux__)
    		#include <GL/glut.h> /* GLUT, includes glu.h and gl.h */
    		#include <stdio.h>
     
    	#elif WIN32    /* Only defined on Windows platforms */
    		#include <windows.h>  /* For MS Windows */
    		#include <GL/freeglut.h>
    		#include <GL/GL.h>
     
            #elif __APPLE__
                    #include <GLUT/glut.h>
     
    	#else
    	#error "OS not supported!"
     
    	#endif
     
    	#include <stdio.h>
    	#include <stdlib.h>
    	#include <stdbool.h>
    ...
    #endif

  9. #9
    Membre du Club
    Homme Profil pro
    Agronome
    Inscrit en
    Septembre 2018
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Agronome
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2018
    Messages : 97
    Points : 60
    Points
    60
    Par défaut
    Ce que je veux dire c'est que je dois rendre le travail sur Linux et mince c'est celui qui passe seulement une fois sur deux : parfois ça passe très bien avec #ifdef Linux puis non faut rajouter des underscore et enfin zut je ne met plus que glut.h

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Y'a pas de hasard et ces informations se trouvent sur internet
    https://blog.kowalczyk.info/article/...msvc-etc..html

    Tu as aussi une option -dM pour avoir cette liste depuis le compilo
    https://stackoverflow.com/a/2567848
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment déployer un fichier WAR fait sur windows sous Debian
    Par ekkatharisi dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 11/07/2017, 22h45
  2. GPIB TOOLBOX: compilation DLL sur windows 8
    Par electroluc dans le forum Scilab
    Réponses: 0
    Dernier message: 02/04/2014, 11h49
  3. Réponses: 3
    Dernier message: 15/05/2009, 09h57
  4. Réponses: 1
    Dernier message: 13/04/2007, 15h55
  5. SVN sur Windows, Dev en remote sous serveur Linux commun
    Par matjap dans le forum Subversion
    Réponses: 7
    Dernier message: 10/01/2007, 17h55

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