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

Langage C++ Discussion :

Librairie compilée en mode shared qui n'est pas shared.


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Librairie compilée en mode shared qui n'est pas shared.
    Salut!

    Je croyais que lorsque l'on compilait une librairie en mode shared il ne fallait pas lier toutes les dépendances de cette librairie au projet, cependant, même si je la compile en shared, j'ai des undefined reference vers des fonctions dépendantes de cette lib...

    Normalement, lorsque je compile SFML je n'ai pas besoin de lier toutes les dépendances de SFML au projet, même si je la compile en static, par contre, ça ne marche pas avec ma lib.

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
     
    -------------- Build: Debug in ODFAEGDEMO (compiler: GNU GCC Compiler)---------------
     
    g++-4.9  -o bin/Debug/ODFAEGDEMO obj/Debug/application.o obj/Debug/caracter.o obj/Debug/hero.o obj/Debug/main.o obj/Debug/monster.o obj/Debug/source.pp.o obj/Debug/test.o   ../../../../usr/local/lib/libodfaeg-network.so ../../../../usr/local/lib/libodfaeg-audio.so ../../../../usr/local/lib/libodfaeg-graphics.so ../../../../usr/local/lib/libodfaeg-window.so ../../../../usr/local/lib/libodfaeg-core.so ../../../../usr/local/lib/libodfaeg-physics.so ../../../../usr/local/lib/libodfaeg-math.so ../../../../usr/local/lib/libsfml-network.so ../../../../usr/local/lib/libsfml-audio.so ../../../../usr/local/lib/libsfml-graphics.so ../../../../usr/local/lib/libsfml-window.so ../../../../usr/local/lib/libsfml-system.so
    obj/Debug/source.pp.o*: Dans la fonction «*std::_Tuple_impl<2ul>::_Tuple_impl()*»*:
    /home/laurent/Projets/ODFAEGDEMO/main.cpp:29*: définitions multiples de «*main*»
    obj/Debug/main.o:/home/laurent/Projets/ODFAEGDEMO/main.cpp:12*: défini pour la première fois ici
    ../../../../usr/local/lib/libodfaeg-network.so*: référence indéfinie vers «*__gmp_randinit_default*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewGetHandleARB*»
    ../../../../usr/local/lib/libodfaeg-network.so*: référence indéfinie vers «*__gmpz_urandomb*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__GLEW_EXT_blend_equation_separate*»
    ../../../../usr/local/lib/libodfaeg-audio.so*: référence indéfinie vers «*sf_read_short*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewBindBuffer*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewGetUniformLocation*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*SDL_GL_DeleteContext*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewActiveTextureARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__GLEW_ARB_texture_non_power_of_two*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewUniform1iARB*»
    ../../../../usr/local/lib/libodfaeg-audio.so*: référence indéfinie vers «*sf_open*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*glewExperimental*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewGetObjectParameterivARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewUniform4fARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewFramebufferTexture2DEXT*»
    ../../../../usr/local/lib/libodfaeg-network.so*: référence indéfinie vers «*__gmpz_get_str*»
    ../../../../usr/local/lib/libodfaeg-network.so*: référence indéfinie vers «*__gmpz_invert*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*odfaeg::window::SDLWindow::SDLWindow()*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewGenBuffers*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewCreateProgramObjectARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*glewGetErrorString*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewGetInfoLogARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewShaderSourceARB*»
    ../../../../usr/local/lib/libodfaeg-network.so*: référence indéfinie vers «*__gmpz_nextprime*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*SDL_GL_SwapWindow*»
    ../../../../usr/local/lib/libodfaeg-audio.so*: référence indéfinie vers «*sf_strerror*»
    ../../../../usr/local/lib/libodfaeg-network.so*: référence indéfinie vers «*__gmpz_sizeinbase*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewFramebufferRenderbufferEXT*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__GLEW_ARB_shading_language_100*»
    ../../../../usr/local/lib/libodfaeg-network.so*: référence indéfinie vers «*__gmpz_gcd*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewCheckFramebufferStatusEXT*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewCreateShaderObjectARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewRenderbufferStorageEXT*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewBlendFuncSeparateEXT*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*odfaeg::math::operator<<(std::ostream&, odfaeg::math::Vec2f const&)*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewDeleteObjectARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__GLEW_ARB_shader_objects*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewDeleteBuffers*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewGenRenderbuffersEXT*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewAttachObjectARB*»
    ../../../../usr/local/lib/libodfaeg-audio.so*: référence indéfinie vers «*sf_seek*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewBindRenderbufferEXT*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewDeleteFramebuffersEXT*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__GLEW_ARB_vertex_shader*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewGenFramebuffersEXT*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewMapBuffer*»
    ../../../../usr/local/lib/libodfaeg-network.so*: référence indéfinie vers «*__gmpz_sub*»
    ../../../../usr/local/lib/libodfaeg-network.so*: référence indéfinie vers «*__gmpz_init*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewGetUniformLocationARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewDeleteRenderbuffersEXT*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*SDL_GL_CreateContext*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewUseProgramObjectARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__GLEW_ARB_vertex_buffer_object*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewBufferDataARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewBindFramebufferEXT*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*SDL_GL_MakeCurrent*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewBindAttribLocationARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__GLEW_ARB_fragment_shader*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewCompileShaderARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*odfaeg::window::SDLWindow::create(unsigned int, unsigned int, std::string)*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*odfaeg::graphic::TransformMatrix::setRotation(int)*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewGenVertexArrays*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewUnmapBuffer*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__GLEW_EXT_blend_func_separate*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewGetAttribLocationARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewUniform1fARB*»
    ../../../../usr/local/lib/libodfaeg-network.so*: référence indéfinie vers «*__gmpz_set_str*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewBindImageTextures*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__GLEW_EXT_framebuffer_object*»
    ../../../../usr/local/lib/libodfaeg-network.so*: référence indéfinie vers «*__gmpz_powm*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewUniform3fARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*SDL_GL_SetAttribute*»
    ../../../../usr/local/lib/libodfaeg-network.so*: référence indéfinie vers «*__gmpz_cmp*»
    ../../../../usr/local/lib/libodfaeg-network.so*: référence indéfinie vers «*__gmpz_get_si*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*odfaeg::window::SDLWindow::~SDLWindow()*»
    ../../../../usr/local/lib/libodfaeg-audio.so*: référence indéfinie vers «*sf_open_virtual*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewBlendEquation*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewBlendEquationSeparateEXT*»
    ../../../../usr/local/lib/libodfaeg-audio.so*: référence indéfinie vers «*sf_close*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*typeinfo for odfaeg::window::SDLWindow*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewLinkProgramARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewBindVertexArray*»
    ../../../../usr/local/lib/libodfaeg-network.so*: référence indéfinie vers «*__gmpz_mul*»
    ../../../../usr/local/lib/libodfaeg-audio.so*: référence indéfinie vers «*sf_write_short*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*glewInit*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewUniformMatrix4fvARB*»
    ../../../../usr/local/lib/libodfaeg-graphics.so*: référence indéfinie vers «*__glewUniform2fARB*»
    ../../../../usr/local/lib/libodfaeg-network.so*: référence indéfinie vers «*__gmpz_set_si*»
    collect2: error: ld returned 1 exit status
    Pourquoi ? Mes fichiers cmake sont pourtant ceux de SFML, et j'ai défini une macro pour l'exportation des fonctions de la lib comme le fait SFML. J'en ai marre de devoir lier toutes les dépendances de ma lib au projet.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 29
    Par défaut
    De ce que je vois dans ta ligne de commande, tu crée un exécutable et non une librairie partagée, sinon il y aurait dû il y avoir l'argument -shared.

    Par défaut, GCC fait la vérification à la création d'un exécutable. Il ne le fait pas à la création d'une librairie partagée.

    Tu peux ignorer la vérification des références indéfinies vers des librairies partagées à la création de l'exécutable en passant l'option suivante au linker :
    -Wl,--unresolved-symbols=method

    ignore-all
    Do not report any unresolved symbols.

    report-all
    Report all unresolved symbols. This is the default.

    ignore-in-object-files
    Report unresolved symbols that are contained in shared
    libraries, but ignore them if they come from regular object
    files.

    ignore-in-shared-libs
    Report unresolved symbols that come from regular object
    files, but ignore them if they come from shared libraries. This
    can be useful when creating a dynamic binary and it is known
    that all the shared libraries that it should be referencing
    are included on the linker's command line.
    Dans CMake tu peux passer les options avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--unresolved-symbols=ignore-all")
    Par contre, je te déconseille fortement de t'abstraire de cette vérification, sauf si tu as vraiment une bonne raison derrière.

    Si la gestion des dépendances est problématique, je te conseil de te tourner vers un gestionnaire de dépendances comme Conan. Il y aura, certes, un coût d'apprentissage initial mais un vrai gain sur le long terme, surtout si le nombre de dépendances va en croissant. De plus, il se couple très bien avec CMake.

Discussions similaires

  1. utiliser une librairie qui n'est pas sur mavencentral
    Par sql_ignorant dans le forum Maven
    Réponses: 7
    Dernier message: 17/04/2016, 22h50
  2. Réponses: 3
    Dernier message: 22/10/2009, 17h30
  3. [débutant] Lire et compiler un source qui n'est pas de moi
    Par Le Furet dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 21/01/2006, 13h01
  4. LIKE de tout ce qui n'est pas compris entre a<-&
    Par DjinnS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/07/2003, 13h09
  5. [VB6] générer un recordset qui n'est pas lier à un bdd
    Par damyrid dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 05/06/2003, 17h48

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