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

Linux Discussion :

Migration application windows -> Linux


Sujet :

Linux

  1. #1
    Membre régulier Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Points : 97
    Points
    97
    Par défaut Migration application windows -> Linux
    Bonsoir,
    j'ai développé une application sous windows et je desire desormais la mettre sous Linux.
    C'est un programme en C qui utilise la librairie mysql.
    Sous windows pas de soucis mais quand je compile sous Linux il me dis que le repertoire ou le fichier mysql est inexistant. Or j'ai bien installé une solution contenant mysql (xampp). Mysql est donc bien installé.

    voici les librairies pour mysql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include <winsock.h>
    #include <MYSQL/mysql.h>
    Que dois je faire ? Je dois savoir ou se trouve le fichier mysql sous linux qui s'est installé lors de l'installation de XAMPP. Et ensuite je dois le mettre dans le même répertoire que mon projet ?

    Par ailleurs, par la suite, je vais devoir utiliser l'utilitaire crone afin de lancer mon application deux fois par jour. Lors de cette configuration je dois juste donner l'exécutable et le fichier .dll associé a mysql ? est ce bien cela

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 697
    Points : 30 996
    Points
    30 996
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nicodn02 Voir le message
    Bonsoir,
    j'ai développé une application sous windows et je desire desormais la mettre sous Linux.
    C'est un programme en C qui utilise la librairie mysql.
    Sous windows pas de soucis mais quand je compile sous Linux il me dis que le repertoire ou le fichier mysql est inexistant. Or j'ai bien installé une solution contenant mysql (xampp). Mysql est donc bien installé.

    voici les librairies pour mysql :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include <winsock.h>
    #include <MYSQL/mysql.h>
    Que dois je faire ? Je dois savoir ou se trouve le fichier mysql sous linux qui s'est installé lors de l'installation de XAMPP. Et ensuite je dois le mettre dans le même répertoire que mon projet ?

    Par ailleurs, par la suite, je vais devoir utiliser l'utilitaire crone afin de lancer mon application deux fois par jour. Lors de cette configuration je dois juste donner l'exécutable et le fichier .dll associé a mysql ? est ce bien cela

    Merci d'avance.
    C'est pas évident de porter une appli d'un système vers l'autre. Mais généralement on a plus de problèmes à porter une appli Linux (système très accessible aux programmeurs) vers Windows (beaucoup plus fermé)
    Bon, déjà XAMPP est normalement une appli Windows destinée à installer un serveur Apache, php et MySQL sous Windows parce que, sous Linux, l'ensemble de ces outils est déjà disponible par défaut. Donc t'as normalement pas besoin d'installer XAMP sous Linux (mais ce n'est bien évidemment pas interdit).

    Maintenant, ton appli utilise des headers de certains outils. Pour que tu puisses compiler ton appli, il te faut avoir sur ton système les "devel" qui sont les headers des librairies sinon tu n'as que la librairie de travail.
    Je m'explique
    Si tu veux utiliser MySQL sous Linux ben tu vas installer le rpm de mysql. Ce rpm contient les différents programmes et puis rien d'autre. Maintenant si tu veux développer ton propre développement qui va dialoguer avec MySQL, il te faut installer le package "mysql-devel" qui contient les headers associés, headers que tu pourras inclure. Et ce principe s'applique à toutes les autres librairies que tu veux utiliser.

    Pour le cron c'est tout simple. Il te suffit de taper "crontab -e" => Ca t'ouvre sous ton éditeur habituel (probablement "vi") un fichier qui te permet de programmer tes taches. Ce fichier est de la forme suivante
    - une tache par ligne
    - une ligne contient 6 champs minimum séparés par un espace
    - champ1: heure de lancement de la tache
    - champ2: minute de lancement de la tache
    - champ3: quantième du mois (le jour entre 1 et 31) de lancement
    - champ4: mois (entre 1 et 12) de lancement
    - champ5: jour de la semaine (0=dimanche, 6=samedi) de lancement
    - champ6 et suivants: programme que tu veux lancer avec éventuellement ses arguments d'utilisation
    Chaque champ peut contenir le caractère "*" qui signifie "peu importe". Autre détail, il n'y a pas de conflit entre les champs 3 et 4 et le champ5. C'est à dire que si tu demandes "1 12 6" la tache sera lancée chaque premier décembre et aussi chaque samedi (et non pas le premier décembre si c'est un samedi comme on pourrait le croire)
    Une fois sauvegardé, le fichier va s'appeler "/var/spool/cron/<ton login>" et le cron le prend en compte. Tu peux aussi obtenir le même résultat si tu ouvres par un éditeur quelconque le fichier "/var/spool/cron/<ton login>" mais faut ensuite que tu spécifies au cron de le reprendre en compte soit en arrêtant et redémarrant le cron, soit en lui envoyant le signal 1 (kill -1 pid_du_cron). Passer par la commande "crontab" t'évite donc toutes ces manip

    Voilà. Beaucoup de nouveaux concepts à assimiler d'un coup. La commande "man" peut t'aider => man crontab par exemple...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre régulier Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Points : 97
    Points
    97
    Par défaut
    Je pensais qu'en installant XAMPP j'aurais installer les librairies dont j'ai besoin... Je dois donc uniquement installer les rpm de mysql alors ?

    Merci pour tes explications.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 697
    Points : 30 996
    Points
    30 996
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nicodn02 Voir le message
    Je pensais qu'en installant XAMPP j'aurais installer les librairies dont j'ai besoin...
    Oui. T'as installé les librairies dont t'as besoin pour exécuter mysql, pas celles qui te permettent de développer avec mysql

    Citation Envoyé par nicodn02 Voir le message
    Je dois donc uniquement installer les rpm de mysql alors ?
    Les libmysql-devel (ou un nom comme ça)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre régulier Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Points : 97
    Points
    97
    Par défaut
    D'accord.

    J'ai donc installé les rpm necessaires par le gestionnaire de paquage sous ubuntu.
    Comment peut on verifier que cela se soit bien installé ?
    et ensuite lors de la compilation de mon application en C je donne le liens vers toutes les librairies mysql ...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    Déjà si tu mets <winsock.h> sur Linux ca ne marchera pas.

    Définis des macros pour des inclusions en fonction du système qui compile.

    Sous linux tu peux créer un Makefile pour compiler ton programme.

    Note: Sur Ubuntu les packages sont des deb pas des rpm .

    Note2 : winsock.h et mysql.h ne sont pas des librairies mais des entêtes
    et "library" se traduit par "bibliothèque" .

  7. #7
    Membre régulier Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Points : 97
    Points
    97
    Par défaut
    Ah je pensais que tout allait se passer facielemnt le tranfert de mon application vers LInux. Je dois creer des macro afin de remplacer <winsock.h>

    J'avais recuperer ce code sur internet pour arriver a se connecter a mysql avec le C mais c'etait sous windows et sous Linux comment faire alors ? A partir de macro c'est ca ? mais comment ?

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 697
    Points : 30 996
    Points
    30 996
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tamiel Voir le message
    Note: Sur Ubuntu les packages sont des deb pas des rpm .
    Oui. J'ai prononcé "rpm" par habitude (moi suis sous Fedora) mais effectivement, les outils de gestion des packetages sont différents entre le monde Debian et le monde Redhat

    Citation Envoyé par nicodn02 Voir le message
    Ah je pensais que tout allait se passer facielemnt le tranfert de mon application vers LInux. Je dois creer des macro afin de remplacer <winsock.h>

    J'avais recuperer ce code sur internet pour arriver a se connecter a mysql avec le C mais c'etait sous windows et sous Linux comment faire alors ? A partir de macro c'est ca ? mais comment ?
    Hum... beaucoup de lacunes qu'il ne sera pas facile de combler
    winsock.h est un en-tête spécifique à windows pour que tu puisses utiliser sous Windows les sockets qui sont un outil Unix de communication réseau. Mais comme cet outil est mis en natif sur Unix et ses dérivés (comme Linux), il est fortement probable que t'auras rien à faire à ce propos sous Linux.

    Une macro de compilation est une variable dans laquelle t'indiques où sont les headers quand ceux-ci ne sont pas dans les répertoires habituels (par exemple si t'as des headers à toi que t'as développé et que tu veux intégrer mais que tu veux de la souplesse par rapport à leur position). Je pense que Tamiel n'aurait pas du t'en parler parce que les headers officiels vont dans les répertoires officiels et une fois installés, ils sont automatiquement accessibles par le compilateur.

    Je pense qu'à ce niveau, il vaudrait mieux reprendre toute la base de ton problème parce qu'on ne s'en sortira pas. Tu veux compiler un code fait pour Windows te permettant d'attaquer une bdd MySQL. Bon. Déjà il faut savoir si ton code, sous Windows, intègre une IHM te permettant de faire certains choix ou si c'est juste un simple exemple bateau de select ou insert. Parce que si c'est un simple connect+select, ce sera très facile de refaire ou simplement trouver son équivalent Linux. Mais si il intègre une IHM, ce sera beaucoup plus compliqué car les IHM sont généralement très fortement liées au système et la portabilité en est beaucoup plus difficile.
    Donc est-ce que tu veux comprendre comment, sous Linux, on fait pour attaquer une bdd MySQL depuis le C ou bien tu veux juste utiliser MySQL et tu t'en fouts de l'outil qu'on te proposera ???
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre régulier Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Points : 97
    Points
    97
    Par défaut
    Je vais donc detailler mon application : c'est uniquement une application en console donc pas d'IHM, les printf ne compte pa en tant qu'IHM lol!. Elle fait seulement une connection a une bdd mysql, des update et insert.

    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    MYSQL* connexionBD(s_BD *BD){
     
         setConnexion (BD); 
     
         //Initialisation de MySQL
         mysql_init(&(BD->mysql));
     
         //Options de connexion     
         mysql_options(&(BD->mysql),MYSQL_READ_DEFAULT_GROUP,"option");
     
       return (mysql_real_connect(&(BD->mysql),BD->HOST,BD->LOGIN,BD->PASSWD,BD->DB,0,NULL,0));
    }
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    void recupererTypeColis(s_BD* BD, s_typeColis** tabColis, int * nbTypeColis){
     
    //Déclaration des pointeurs de structure
         MYSQL_RES *result = NULL;
         MYSQL_ROW row = NULL;       
         int i = 0; 
         int num_champs = 0; 
     
          //Requête qui sélectionne tous les types de colis
          mysql_query(&(BD->mysql), "SELECT * FROM typeColis");
     
          //printf("Requete effectuee ! \n");
          result = mysql_store_result(&(BD->mysql));
     
          if (result){
               //     printf("row : ");
               //     printf("%d",mysql_num_rows(result));
                    *nbTypeColis = mysql_num_rows(result);             
     
                    *tabColis=(s_typeColis*)malloc(*nbTypeColis * sizeof(s_typeColis));
     
                    //On récupère le nombre de champs
                    num_champs = mysql_num_fields(result);
     
                    //Tant qu'il y a un résultat
                    while ((row = mysql_fetch_row(result))) {
     
                          (*tabColis + i)->NumType = atof(row[0]?row[0]:"0");      
                          strcpy((*tabColis + i)->TypeTransport,row[1]?row[1]:"");  
                          strcpy((*tabColis + i)->TypeColis,row[2]?row[2]:""); 
     
                          i++;
                    }
     
                //Libération du jeu de résultat
                mysql_free_result(result);            
     
          }else{
                 printf("PAS DE RESULTAT POUR LA REQUETE recupererTypeColis!\n");
                 *nbTypeColis=0;
                 }  
     
                //Libération du jeu de résultat
                mysql_free_result(result);  
     
    }
    etc...

    et pour cela j'ai besoin sous windows de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include <winsock.h>
    #include <MYSQL/mysql.h>

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 697
    Points : 30 996
    Points
    30 996
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nicodn02 Voir le message
    et pour cela j'ai besoin sous windows de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include <winsock.h>
    #include <MYSQL/mysql.h>
    Bien évidemment que les printf ne sont pas de l'IHM. Je parlais de boites et boutons...

    Bon, pour un truc aussi simple qu'un exemple de connexion à une bdd MySQL, au-lieu de tenter de le porter de Windows vers Linux j'ai préféré aller en chercher un déjà tout fait pour Linux.

    J'ai trouvé celui-là :
    Code C : 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
    26
    27
    28
    29
    30
    #include <stdio.h>
    #include <mysql/mysql.h>
     
    #define MYSQL_HOST "localhost"
    #define MYSQL_DB "db"
    #define MYSQL_LOGIN "login"
    #define MYSQL_PASSWD "pass"
     
    int main() {
            MYSQL mysql;
            MYSQL_RES *result;
            MYSQL_ROW row;
     
            mysql_init(&mysql);
            if (!mysql_connect(&mysql,MYSQL_HOST,MYSQL_LOGIN,MYSQL_PASSWD)) {
                    return -1;
            }
            if (mysql_select_db(&mysql,MYSQL_DB)) {
                    mysql_close(&mysql);
                    return -1;
            }
            mysql_query(&mysql,"SELECT champ1 FROM table1");
            result = mysql_use_result(&mysql);
            while((row = mysql_fetch_row(result))) {
                    printf("%s",row[1]);
                    fflush(stdout);
            }
            mysql_close(&mysql);
            return 0;
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Membre régulier Avatar de nicodn02
    Profil pro
    Consultant .NET
    Inscrit en
    Mars 2007
    Messages
    263
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant .NET

    Informations forums :
    Inscription : Mars 2007
    Messages : 263
    Points : 97
    Points
    97
    Par défaut
    Nickel ca marche.

    Je regarde desormais comment faire un makefile et de creer un executable.
    le makefile est bien plus pratique si notre projet possede divers fichiers sources?

    actuellement j'ai main.c Tournee.c Livraison.c BD.c
    Je dois donc créer les fichiers objets correspondants et ensuite creer l'executable ?

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 697
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 697
    Points : 30 996
    Points
    30 996
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nicodn02 Voir le message
    Nickel ca marche.

    Je regarde desormais comment faire un makefile et de creer un executable.
    le makefile est bien plus pratique si notre projet possede divers fichiers sources?

    actuellement j'ai main.c Tournee.c Livraison.c BD.c
    Je dois donc créer les fichiers objets correspondants et ensuite creer l'executable ?
    Un makefile est un fichier qui décrit comment créer telle cible quand on a telle source.
    Exemple
    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
    main.o: main.c (éventuellement xxx.h yyy.h)
    <tabulation>gcc -c $<
    <tabulation>(éventuellement une autre commande si nécessaire)
     
    Tournee.o: Tournee.c (éventuellement xxx.h yyy.h)
    <tabulation>gcc -c $<
    <tabulation>(éventuellement une autre commande si nécessaire)
     
    Livraison.o: Livraison.c (éventuellement xxx.h yyy.h)
    <tabulation>gcc -c $<
    <tabulation>(éventuellement une autre commande si nécessaire)
     
    BD.o: BD.c (éventuellement xxx.h yyy.h)
    <tabulation>gcc -c $<
    <tabulation>(éventuellement une autre commande si nécessaire)
     
    nom_de_l'executable: main.o Tournee.o Livraison.o BD.o
    <tabulation>gcc main.o Tournee.o Livraison.o BD.o -o nom_de_l'executable
    Ainsi tu vois bien la notion de hiérarchie. Il te suffit de taper "make nom_d'une_cible" et le Makefile fera en sorte que seule la cible moins récente que sa source soit refaite. Ensuite ben à toi de faire...

    Attention, la tabulation est obligatoire
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Développer des applications Windows sous Linux
    Par FunkyTech dans le forum Linux
    Réponses: 2
    Dernier message: 13/02/2008, 09h31
  2. migration de windows vers linux
    Par acipeg dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/11/2006, 14h53
  3. Application Windows sous Linux
    Par legrec dans le forum Applications et environnements graphiques
    Réponses: 3
    Dernier message: 24/10/2006, 09h03
  4. Migration DHCP Windows vers Linux
    Par valal dans le forum Réseau
    Réponses: 3
    Dernier message: 04/05/2006, 09h38
  5. Réponses: 1
    Dernier message: 01/02/2005, 12h56

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