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

Systèmes de compilation Discussion :

Inclure une bibliothèque dans un makefile


Sujet :

Systèmes de compilation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut Inclure une bibliothèque dans un makefile
    Bonjour,

    J'ai réalisé un programme c++ qui fonctionne à merveille et qui nécessite une librairie. Sous eclipse pas de problème sa compile et sa sort l'exécutable.
    J'ai besoin d'appeler ce fichier via php avec la commande exec() j'ai donc copier la librairie en .dll dans le dossier de l'exécutable et sa marche parfaitement.

    Cependant je doit maintenant placer ces fichier sur un serveur linux. Je doit donc recompiler ma librairie et mon programme, malheureusement la librairie refuse de compiler avec des erreurs en sortie de répertoire ... Bref j'ai donc réussi à la compiler sous Windows via MinGW qui simule une interface linux et j’obtiens un jolie fichier en .a .
    J'ai donc envoyer mes sources ainsi que le fichier .a sur le serveur linux et j'ai créer un makefile, cependant il n'inclue pas la librairie automatiquement. J'ai donc cherché si il y avait moyen d'inclure la librairie dans le makefile et c'est apparemment possible avec les option -L et -l. Par contre je ne comprend pas du tout comment c'est fait ... Honte à moi on m'a appris uniquement à faire des makefile "minimaliste" et j'aurais donc souhaité savoir si il était possible d'inclure une librairie dans ce type de makefile ou si je devais étudier la façon de faire un makefile avec des variables comme j'ai pu en trouvé pour inclure la librairie. ( http://gl.developpez.com/tutoriel/outil/makefile/ )

    Voici mon makefile actuel, on sait jamais dès fois que sa puisse vous aider :
    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
    FireScan.out : Connection.o FireScanError.o FonctionHexa.o Information.o Scan.o FunctionModBusFinsecur.o Main.o
    	gcc Connection.o FireScanError.o FonctionHexa.o Information.o Scan.o FunctionModbusFinsecur.o Main.o
     
    Main.o : Connection.h Scan.h FunctionModBusFinsecur.h FireScanError.h Information.h Main.cpp
    	gcc -c Main.cpp
     
    Connection.o : FireScanError.h Connection.h Connection.cpp
    	gcc -c Connection.cpp
     
    FireScanError.o : FireScanError.h FireScanError.cpp
    	gcc -c FireScanError.cpp
     
    FonctionHexa.o : FonctionHexa.h FonctionHexa.cpp
    	gcc -c FonctionHexa.cpp
     
    Information.o : FunctionModbusFinsecur.h Connection.h Information.h Information.cpp
    	gcc -c Information.cpp
     
    Scan.o : Connection.h FonctionHeca.h Scan.h Scan.cpp
    	gcc -c Scan.cpp
     
    FunctionModBusFinsecur.o : FunctionModBusFinsecur.h FunctionModbusFinsecur.cpp
    	gcc -c FunctionModbusFinsecur.cpp
    L'erreur renvoyée est la suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    gcc -c Connection.cpp
    In file included from Connection.cpp:8:
    Connection.h:11: fatal error : modbus.h : Aucun fichier ou dossier de ce type
    compilation terminated.
    make: *** [Connection.o] Erreur1
    Merci d'avance pour vos conseil

  2. #2
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 70
    Par défaut
    Tu peux egalement utilise eclipse sous linux, si tu as un peux de temps regarde du cote de CMake.

    Je ne suis plus bien sur pour -L mais en tout cas -l sert pour l'inclusion de library (.so ou .a) qui on des nom particulier, libMA_LIB.a ou encore libMA_LIB.so. Pour l'inclusion avec gcc tu peux t'y prendre de cette facon:

    gcc main.cpp -lMA_LIB -MES_FLAGS

  3. #3
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2008
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 70
    Par défaut
    Apparement -L indique le repertoire d'inclusion des libraries.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Options de Répertoires
    -Bpréfixe -Irépertoire -I- -Lrépertoire
    http://www.linux-kheops.com/doc/man/...an1/gcc.1.html

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 57
    Par défaut
    Bonsoir!
    La lib genere, lib.a, est une librairie statique.
    Pour compiler avec tu as juste a l'ajouter a ta liste de compilation:
    gcc main.c lib.a

    -L et -l sont utilise pour les lib dynamique en .so, si je ne me trompe pas.
    Soit libplop.so:
    -Lrepertoire/de/ma/lib/ -lplop

    Bonne journee!

  5. #5
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut
    Bonjour ailonn et merci beaucoup

  6. #6
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,
    Citation Envoyé par ailonn Voir le message
    -L et -l sont utilise pour les lib dynamique en .so, si je ne me trompe pas.
    Hé, si, tu te trompes... -L et l sont utilisé dés que ld (l'éditeur de liens) doit intervenir sur une bibliothèque externe (comprend: non utilisée par défaut par ld)...

    gcc main.o lib.a ne fonctionne que "par hasard" (une bibliothèque "libXXX.a" n'est jamais qu'une archive contenant le code binaire généré) parce que lib.a se trouve dans un dossier visité par ld lors de sa recherche des différentes bibliothèques

    Les options "correctes" et "officielles" pour les bibliothèques sont -Ldirectory (si différent des répertoires inclus dans la recherche) -llibrary (dés que bibliothèque non standard, voir y compris pour la bibliothèque standard si tu invoque ld et non g++ pour l'édition de liens)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Membre chevronné Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Par défaut
    Merci pour les précisions koala01

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

Discussions similaires

  1. inclure une image dans un bloc de texte
    Par allowen dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 25/08/2005, 14h11
  2. Inclure une DLL dans le .exe final?? possible?
    Par xavmax dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2005, 17h00
  3. [JAR] Inclure une librairie dans un point jar
    Par Orionmel dans le forum Général Java
    Réponses: 5
    Dernier message: 08/11/2004, 22h25
  4. [BCB6]Inclure une police dans un exécutable
    Par Bodom-Child dans le forum C++Builder
    Réponses: 8
    Dernier message: 20/08/2004, 11h18
  5. Inclure une dll dans une ressource
    Par bgcode dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/08/2003, 11h12

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