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

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

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

    Informations forums :
    Inscription : septembre 2018
    Messages : 88
    Points : 57
    Points
    57

    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
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

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

    Informations forums :
    Inscription : septembre 2018
    Messages : 88
    Points : 57
    Points
    57

    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
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    2 820
    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 : 2 820
    Points : 6 219
    Points
    6 219

    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
    ...
    Inscrit en
    juin 2009
    Messages
    4 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : ...

    Informations forums :
    Inscription : juin 2009
    Messages : 4 117
    Points : 12 297
    Points
    12 297
    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
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

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

    Informations forums :
    Inscription : septembre 2018
    Messages : 88
    Points : 57
    Points
    57

    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
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    2 820
    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 : 2 820
    Points : 6 219
    Points
    6 219

    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 164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 164
    Points : 22 786
    Points
    22 786

    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
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

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

    Informations forums :
    Inscription : septembre 2018
    Messages : 88
    Points : 57
    Points
    57

    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
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

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

    Informations forums :
    Inscription : septembre 2018
    Messages : 88
    Points : 57
    Points
    57

    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
    5 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 5 842
    Points : 25 788
    Points
    25 788

    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