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 :

CMake openNURBS - lier lib*.a avec CMake


Sujet :

Systèmes de compilation

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Points : 5
    Points
    5
    Par défaut CMake openNURBS - lier lib*.a avec CMake
    Bonjour,

    Je cherche à compiler mon projet à travers CMake, avec la librairie openNURBS.
    Avec certaines configuration de mon CMakeLists.txt, j'arrive à compiler, mais à l'exécution j'obtiens une erreur
    symbol lookup error: PATH/lib/libmyModeler.so: undefined symbol: _ZN13ON_NurbsCurveC1Ev

    Je suis sûre que le problème provient de ma façon d'inclure openNURBS (--> la librairie libopenNURBS.a) dans le CMakeLists.txt, car d'autres projets ont déjà compilé correctement avec openNURBS, mais je n'arrive pas à copier leur fonctionnement...

    Voici l’arborescence de mon projet :

    myProject
    CMakeLists.txt
    src/
    CMakeLists.txt
    *.cpp *.h
    include/
    opennurbs/
    CMakeLists.txt
    Makefile
    libopenNURBS.a
    *.cpp *.h
    build/
    dossier de compilation

    J'ai compilé openNURBS, ce qui a créé libopenNURBS.a et des .o dans le dossier include/opennurbs/


    Dans mon CMakeLists.txt principal, celui à la racine du projet (myProject/CMakeLists.txt), j'ai les lignes suivantes pour openNURBS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    cmake_minimum_required (VERSION 2.6)
    PROJECT (myProject)
    ...
    include_directories (${PROJECT_SOURCE_DIR}/include/opennurbs)
    add_subdirectory (${PROJECT_SOURCE_DIR}/include/opennurbs)
    SET_TARGET_PROPERTIES(opennurbs PROPERTIES LINKER_LANGUAGE CXX)
    Pour compiler, je lance les commandes suivantes depuis le dossier build
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ccmake ../
    cmake ../
    make
    Dans la configuration de ccmake, j'indique l'option de compilation -fPIC
    Au début de la compilation, il m'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Scanning dependencies of target opennurbs
    Linking CXX static library libopennurbs.a
    [  0%] Built target opennurbs
    ...
    et il compile jusqu'au bout. Sauf qu'a l'exécution, j'ai cette erreur "undefined symbol"


    Votre aide est la bienvenue !

  2. #2
    Futur Membre du Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Pas d'idées ?

    Je relance la discussion en ajoutant quelques éléments sur lesquels j'ai avancé hier :

    1. J'ai réécrit complètement les CMakelists.txt pour la compilation de openNURBS, afin d'appeler plus facilement la librairie obtenue dans mon CMakelists.txt principale :
    J'ai réorganisé les sources de openNURBS dans un dossier src/ qui se compile dans la librairie statique openNURBSCore.

    2. Dans mon CMakeLists.txt principal, je fais appel à openNURBS de la façon suivante :
    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
    if (OPENNURBS AND NOT DEFINED ${PKG_NAME}_OPENNURBS)
       set (${PKG_NAME}_OPENNURBS ${OPENNURBS})
    endif (OPENNURBS AND NOT DEFINED ${PKG_NAME}_OPENNURBS)
     
    if(NOT OPENNURBS_USED)
       if(NOT DEFINED openNURBS_DIR)
          set(openNURBS_DIR ${CMAKE_BINARY_DIR})
       endif(NOT DEFINED openNURBS_DIR)
       find_package(openNURBS REQUIRED)
    endif(NOT OPENNURBS_USED)
    if(OPENNURBS_FOUND OR OPENNURBS_USED)
       set (OPENNURBS_LIBRARIES  openNURBSCore)
       include_directories(${OPENNURBS_INCLUDE_DIR})
       link_directories(${OPENNURBS_LIBRARY_DIR})
       link_libraries(${OPENNURBS_LIBRARIES})
    else(OPENNURBS_FOUND OR OPENNURBS_USED)
       message(FATAL_ERROR "OPENNURBS NOT FOUND" )
    endif(OPENNURBS_FOUND OR OPENNURBS_USED)
    A nouveau tout compile, mais j'ai encore et toujours cette erreur à l’exécution : "undefined symbol"

    Si besoin je peux poster tout mes CMakeLists.txt, mais j'ai peur que ce soit un peu lourd à comprendre (je fais aussi appel à d'autres libraires...)

    Quelqu'un a une piste pour résoudre ce problème ?...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjour,
    Je n'ai pas de réponse précise à apporter, mais peut-être que ces questions peuvent t'aider:
    - ce symbole est-il défini dans "libopenNURBS.a" (si gcc est utilisé: objdump -t libopenNURBS.a)
    - est-ce que cmake n'aurait pas quand même fait l'édition de lien avec la version dynamique de la librairie? (si unix: ldd éxécutable)

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2007
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 92
    Points : 78
    Points
    78
    Par défaut
    fPIC ce n'est pas seulement pour les librairie dynamique ? Essaie sans...

    Sinon pour cmake tu utilises ça ? ( cf http://www.cmake.org/cmake/help/v3.0...libraries.html)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    add_library(B STATIC B.a)
    add_executable(main main.c)
    target_link_libraries(main A)

Discussions similaires

  1. un problème avec cMake
    Par hamta dans le forum Systèmes de compilation
    Réponses: 4
    Dernier message: 27/11/2008, 09h20
  2. probleme avec cmake
    Par nina08 dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 19/05/2008, 09h43
  3. aidez moi à travailler avec cmake
    Par mohus08 dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 15/05/2008, 11h01
  4. Compilation d'un exemple avec cmake
    Par ChipsterJulien dans le forum Boost
    Réponses: 0
    Dernier message: 19/03/2008, 17h16
  5. Problème avec cmake : signification d'une erreur
    Par G3G3 dans le forum Systèmes de compilation
    Réponses: 0
    Dernier message: 25/10/2007, 11h24

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