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 :

option compilation g++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Par défaut option compilation g++
    Bonjour,

    dans le cadre de mes études je dois compiler et utiliser un logiciel de gestion de bases de données.
    Ce logiciel est développé et utilisé en interne car il n'est utilisable que pour une base de données bien spécifique.
    Pour compiler ce programe je dois utiliser cmake puis, l'instruction make. Tout ce passe bien jusqu'à ce que le compilateur c++ bloque sur une option de compilation.
    Voici l'instruction de compilation ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /usr/bin/c++     -O3 -DNDEBUG  -fPIC "CMakeFiles/databaseView.dir/databaseView.o"   -o ../../../../bin/databaseView -rdynamic -L/home/pierrick/projet_synthese/bd-test/SmrDatabase/build -Wl,-Bstatic -lSmrBuffer_LIB -lSmrDatabase_LIB -lNewmat_LIB -lSmrCommon_LIB -lSmrCore_LIB -lSmrMath_LIB -lSmrRenderer_LIB -Wl,-Bdynamic -lGLU -lGL -lSM -lICE -lX11 -lXext -lglut -lXmu -lXi -lGLEW -l* -Wl,-rpath,/home/pierrick/projet_synthese/bd-test/SmrDatabase/build
    C'est à la fin ce cette commande qu'il y a une erreur : " -l* -Wl,-rpath,/home/pierrick/projet_synthese/bd-test/SmrDatabase/build " n'est pas reconnu comme une option de compilation existante.
    Or cette option existe bien sauf que je ne sais pas comment l'utiliser . Sachant que pour que la compilation fonctionne bien j'ai déjà modifié deux ou trois truc du genre un nom de fichier mal écrit. Donc il se peut que l'erreur soit du même genre. Cad une erreur idiote

    Pour information le dossier référencé existe bien et contient des fichier compilé.

    Dsl de ce message un peu barbare mais je n'ai pas trop d'autres solutions pour le moment et mon problème est assez urgent. D'avance merci !!

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Sans regarder plus loin, le "-l*", c'est perturbant.

    Normalement, avec l'option "-l", tu donnes les noms des librairires avec lesquelles il faut se linker. Avec cette option tu veux peut être indiquer que tu veux te linker avec toutes les librtairies mais c'est pas comme cela que ca marche. Il faut indiquer explicitement quelles slibrairies tu veux utiliser, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -l librairie1 -l librairie2 -l librairie3...
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Par défaut
    ok c'est un peu ce que je pensais.

    Cette ligne de compilation se trouve dans un fichier généré automatiquement par cmake. J'ai testé de ne lancer que la ligne erronée en modifiant la dernière option mais rien n'y fait ...

    La personne qui m'a fourni le programme m'a dit de regarder dans le fichier de configuration de cmake. Je ne vois pas trop ce qu'il faudrait que je modifie. Voici le code en question :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    PROJECT (SMRDATAREPOSITORY)
     
    CMAKE_MINIMUM_REQUIRED (VERSION 2.4)
     
    if(COMMAND cmake_policy)
          cmake_policy(SET CMP0003 NEW)
    endif(COMMAND cmake_policy)
     
     
    SET (CMAKE_BUILD_TYPE Release)
    SET (CMAKE_VERBOSE_MAKEFILE true)
     
    SET (SAMSARA_DIR ${CMAKE_SOURCE_DIR}/Smr)
    SET (SAMSARA_SOURCE_DIR ${SAMSARA_DIR}/SRC/common ${SAMSARA_DIR}/SRC/SmrCore ${SAMSARA_DIR}/SRC/SmrMath)
     
    IF(UNIX)
      IF(APPLE)
        INCLUDE(FindOpenGL)
        INCLUDE(FindGLUT)
        INCLUDE(FindX11)
        SET(GLUT_INCLUDE_DIR /System/Library/Frameworks/GLUT.framework/Headers)
        SET(GLEW_INCLUDE_DIR /usr/include/GL)
        SET(GLUT_LIBRARIES "-framework glut" objc)
        SET(GLEW_LIBRARIES /usr/lib/libGLEW.a)
      ELSE(APPLE)
        INCLUDE(FindOpenGL)
        INCLUDE(FindGLUT)
        SET (GLEW_LIBRARIES GLEW)
      ENDIF(APPLE)
    #    SET (BERKELEY_INCLUDE_DIR /opt/local/include/db47)
            SET (BERKELEY_INCLUDE_DIR /usr/include/db4.5/*)
     
    #    SET (BERKELEY_LIB /opt/local/lib/db47/libdb_cxx-4.7.a)
            SET (BERKELEY_LIB /usr/lib/*)
     
    ENDIF(UNIX)
     
    IF(WIN32)
        INCLUDE(FindOpenGL)
        INCLUDE(FindQt)
        SET(GUI "Win32")
        SET(GLUT_INCLUDE_DIR ${SAMSARA_SOURCE_DIR}/thirdParty/win32/include)
        SET(GLEW_INCLUDE_DIR ${SAMSARA_SOURCE_DIR}/thirdParty/win32/include)
        SET(GLUT_LIBRARIES ${SAMSARA_SOURCE_DIR}/thirdParty/win32/lib/glut32.lib)
        SET(GLEW_LIBRARIES ${SAMSARA_SOURCE_DIR}/thirdParty/win32/lib/glew32.lib)
     
        # A completer par vos choix
        SET (BERKELEY_INCLUDE_DIR .)
        SET (BERKELEY_LIB .)
    ENDIF(WIN32)
     
    SET (LIBRARY_OUTPUT_PATH ${SMRDATAREPOSITORY_SOURCE_DIR}/build)
    SET (EXECUTABLE_OUTPUT_PATH ${SMRDATAREPOSITORY_SOURCE_DIR}/bin)
     
    ADD_SUBDIRECTORY (Smr)
    ADD_SUBDIRECTORY (test)
    Sachant que j'utilise une distribution GNU/linux et que j'ai moi-même modifié le contenu du ENDIF(APPLE) pour s'adapter à ma configuration. Les lignes commentées sont les commandes d'origine.

    J'ai aussi remarqué que lors de l'exéctution de la commande make j'ai des logs en rouge qui apparaissent du style :

    Linking CXX static library ../../../../../../build/libNewmat_LIB.a
    A chaque fois qu'un fichier est crée dans le dossier build situé à la racine du projet j'ai un message tel que celui ci.
    Or le dossier pointé par l'option de compilation "-l*" est justement ce dossier build situé à la racine du projet.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Les /* à la fin des répertoires sont probablement malvenus, en tout cas ce n'est pas usuel

    # SET (BERKELEY_INCLUDE_DIR /opt/local/include/db47)
    SET (BERKELEY_INCLUDE_DIR /usr/include/db4.5/*)

    # SET (BERKELEY_LIB /opt/local/lib/db47/libdb_cxx-4.7.a)
    SET (BERKELEY_LIB /usr/lib/*)
    Ca pourrait expliquer pourquoi tu te retrouves avec un -l* qui n'a pas de sens.
    Essaye plutôt:

    SET (BERKELEY_INCLUDE_DIR /usr/include/db4.5)
    SET (BERKELEY_LIB /usr/lib)

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Par défaut
    J'ai effectué les changements dans le fichier de conf, mais çà ne fonctionne toujours pas
    Cela dit la ligne qui pose probleme à changé et logs aussi. Maintenant il n'y a plus de "-l*".
    Par contre j'ai toujours les erreurs de linking en cours de compilation.

    Voici la nouvelle commande de compilation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cd /home/pierrick/projet_synthese/bd-test/SmrDatabase/project/unix/test/databaseView && /usr/bin/c++     -O3 -DNDEBUG  -fPIC "CMakeFiles/databaseView.dir/databaseView.o"   -o ../../../../bin/databaseView -rdynamic -L/home/pierrick/projet_synthese/bd-test/SmrDatabase/build -Wl,-Bstatic -lSmrBuffer_LIB -lSmrDatabase_LIB -lNewmat_LIB -lSmrCommon_LIB -lSmrCore_LIB -lSmrMath_LIB -lSmrRenderer_LIB -Wl,-Bdynamic -lGLU -lGL -lSM -lICE -lX11 -lXext -lglut -lXmu -lXi -lGLEW -Wl,-Bstatic -ldb_cxx-4.5 -Wl,-Bdynamic -Wl,-rpath,/home/pierrick/projet_synthese/bd-test/SmrDatabase/build
    A priori ce n'est plus les options qui sont mauvaises mais le code en lui même car les logs sont assez etrange :
    /home/pierrick/projet_synthese/bd-test/SmrDatabase/build/libSmrDatabase_LIB.a(SmrMotionRepository.o): In function `SmrMotionRepository::contains(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
    SmrMotionRepository.cpp: (.text+0xfc): undefined reference to `SmrBufferReader::SmrBufferReader(void*)'
    Et c'est comme ca pendant une trentaine de lignes.

  6. #6
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    C'est une erreur de link

    Ça veut dire que le constructeur SmrBufferReader::SmrBufferReader(void*) est déclaré, mais n'est pas défini.

    Deux solutions :
    - tu as le code .cc de SmrBuffer, il faut le définir dedans
    - tu n'as pas ce code, il faut que tu te linkes avec la bonne librairie

    /home/pierrick/projet_synthese/bd-test/SmrDatabase/build/libSmrDatabase_LIB.a(SmrMotionRepository.o):
    vu ceci, j'aurais tendance à penser que c'est la première solution

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Par défaut
    J'ai regardé plus en détail le code source et les erreurs.
    En fait J'ai une classe qui crée un objet d'une autre classe préalablement compilée correctement. (Jusque là pas de problème.) C'est lors de l'apelle des méthodes de cet objet que j'ai les erreurs de compilation.

    A priori il faudrais passer en parametre de le chemin des binaires correspondant a l'objet crée.

    J'explique : Dans un dossier j'ai deux classe. Une classe est compilée, les binaires sont enregistré dans un autre dossier.
    L'autre classe crée un objet de cette premiere classe, sauf que pour fonctionner il lui faudrais le chemin des fichiers binaires de la classe demandée.

    Or si j'essaie de modifier le CMakeFile ca ne fonctionne pas puisque le fichier qui contient les binaires est crée au moment de la compilation.

  8. #8
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    Poste ton CMakeFile, et l'arborescence en question.

    Là, c'est un peu trop vague pour qu'on puisse t'aider.

Discussions similaires

  1. option compilation xlc
    Par zephyrin dans le forum Autres éditeurs
    Réponses: 0
    Dernier message: 02/05/2013, 10h43
  2. Option compilation g++
    Par LinuxUser dans le forum C++
    Réponses: 4
    Dernier message: 07/11/2012, 19h00
  3. Option Compiler en grisé
    Par stigma dans le forum Access
    Réponses: 4
    Dernier message: 08/04/2009, 11h26
  4. [option compilation]define, comment ca marche?
    Par kacedda dans le forum MFC
    Réponses: 2
    Dernier message: 16/01/2007, 10h30
  5. Réponses: 2
    Dernier message: 27/02/2004, 13h47

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