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

Discussion :

Liaison avec des bibliothèques statiques

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur avant-vente
    Inscrit en
    Août 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur avant-vente
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2014
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Liaison avec des bibliothèques statiques
    Bonjour,
    J'utilise QtCreator 4.2.1 avec compil compil MinGW4.9.2 32 bit (plateforme Win 8.1).
    Mon projet "pgi" comporte uniquement un main.cpp qui appelle 2 bibliothèques statiques persos et 1 bibliothèque de templates "eigen3" (uniquement des entêtes); voici le pgi.pro:
    Code qt-pro : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    QT += core
    QT -= gui
    CONFIG += c++11
    TARGET = pgi
    CONFIG += console
    CONFIG -= app_bundle
    TEMPLATE = app
    LIBS += d:/Qt-apps/build-Mathlib2-Desktop_Qt_5_5_1_MinGW_32bit-Release/release/libMathlib2.a \
            d:/Qt-apps/build-PhygenicLib-Desktop_Qt_5_5_1_MinGW_32bit-Debug/debug/libPhygenicLib.a
    INCLUDEPATH += d:/Qt-apps/PhygenicLib \
                   d:/Qt-apps/Mathlib2 \
                   d:/Qt-apps/eigen3
    SOURCES += main.cpp
    HEADERS +=
    DEFINES += QT_DEPRECATED_WARNINGS
    La bibli Mathlib2 comporte uniquement 1 mathlib2.h et 1 mathlib2.cpp , compilée en mode release.
    La bibli PhygenicLib comporte n fichiers d'entête +n sources et fait appel aux biblis Mathlib2 (statique) et eigen3 (entêtes), compilée en mode debug.
    Voici mon main() qui ne veut pas linker:
    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
    #include <iostream>
    include "Anasyntax.h"
    using namespace std;
    ofstream fdmp("test_pgi.txt");
    ostringstream oss ;
    // ==============
    int main(int, char**)
    {
        try { // bloc try
            string msg_log= OK ;
            Anasyntax asynt ;
            asynt.interprete(fdmp);
        } catch (std::exception const& err) {
            fdmp << err.what()<< endl<<" - Erreur fatale." << endl ;
            cerr << err.what()<< endl<<"- Erreur fatale." << endl ;
        }
        cout<<'\a' ; // sonnette de fin
        fdmp << "--- FIN DE L'EXECUTION --- "<< std::endl;
        fdmp.close() ;
        return EXIT_SUCCESS ;
    }
    L'include "Anasyntax.h" tire tous les entêtes nécessaires et suffisants pour l'ensemble des 3 bibliothèques (racine de l'arbre des entêtes).
    Extrait du résultat compil:
    19:39:24: Exécution des étapes pour le projet pgi...
    19:39:24: Débute : "C:\Qt\Tools\mingw492_32\bin\mingw32-make.exe" clean
    C:\Qt\5.5\mingw492_32\bin\qmake.exe -spec win32-g++ "CONFIG+=debug" "CONFIG+=qml_debug" -o Makefile ..\pgi\pgi.pro
    C:/Qt/Tools/mingw492_32/bin/mingw32-make -f Makefile.Debug clean
    mingw32-make[1]: Entering directory 'D:/Qt-apps/build-pgi-Desktop_Qt_5_5_1_MinGW_32bit-Debug'
    del debug\main.o
    mingw32-make[1]: Leaving directory 'D:/Qt-apps/build-pgi-Desktop_Qt_5_5_1_MinGW_32bit-Debug'
    C:/Qt/Tools/mingw492_32/bin/mingw32-make -f Makefile.Release clean
    mingw32-make[1]: Entering directory 'D:/Qt-apps/build-pgi-Desktop_Qt_5_5_1_MinGW_32bit-Debug'
    del release\main.o
    Impossible de trouver D:\Qt-apps\build-pgi-Desktop_Qt_5_5_1_MinGW_32bit-Debug\release\main.o
    mingw32-make[1]: Leaving directory 'D:/Qt-apps/build-pgi-Desktop_Qt_5_5_1_MinGW_32bit-Debug'
    19:39:25: Le processus "C:\Qt\Tools\mingw492_32\bin\mingw32-make.exe" s'est terminé normalement.
    19:39:25: Configuration inchangée, étape qmake sautée.
    19:39:25: Débute : "C:\Qt\Tools\mingw492_32\bin\mingw32-make.exe"
    C:/Qt/Tools/mingw492_32/bin/mingw32-make -f Makefile.Debug
    mingw32-make[1]: Entering directory 'D:/Qt-apps/build-pgi-Desktop_Qt_5_5_1_MinGW_32bit-Debug'
    g++ -c -pipe -fno-keep-inline-dllexport -g -std=c++0x -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_CORE_LIB -I..\pgi -I. -Id:\Qt-apps\PhygenicLib -Id:\Qt-apps\Mathlib2 -Id:\Qt-apps\eigen3 -IC:\Qt\5.5\mingw492_32\include -IC:\Qt\5.5\mingw492_32\include\QtCore -Idebug -IC:\Qt\5.5\mingw492_32\mkspecs\win32-g++ -o debug\main.o ..\pgi\main.cpp
    g++ -Wl,-subsystem,console -mthreads -o debug\pgi.exe debug/main.o d:/Qt-apps/build-Mathlib2-Desktop_Qt_5_5_1_MinGW_32bit-Release/release/libMathlib2.a d:/Qt-apps/build-PhygenicLib-Desktop_Qt_5_5_1_MinGW_32bit-Debug/debug/libPhygenicLib.a -LC:/Qt/5.5/mingw492_32/lib -lQt5Cored
    d:/Qt-apps/build-PhygenicLib-Desktop_Qt_5_5_1_MinGW_32bit-Debug/debug/libPhygenicLib.a(mecagen.o): In function `ZN10Solide_dyn4calcEv':
    D:\Qt-apps\build-PhygenicLib-Desktop_Qt_5_5_1_MinGW_32bit-Debug/../PhygenicLib/mecagen.cpp:220: undefined reference to `rotation_WM(V3)'
    D:\Qt-apps\build-PhygenicLib-Desktop_Qt_5_5_1_MinGW_32bit-Debug/../PhygenicLib/mecagen.cpp:221: undefined reference to `Mat_transp_3x3(Mat3x3)'
    Apparemment, make ne trouve pas les liens vers les fonctions de la bibli Mathlib2 dont il a besoin pour les fonctions appelées dans la bibli PhygenicLib; alors que ces liens devraient déjà être résolus à l'intérieur de libPhygenicLib.a (non?)
    J'ai une parade qui fonctionne nickel: il suffit d'insérer au début du main() un appel à une fonction quelconque de la bibli Mathlib2, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main(int, char**)
    {
        coupure(0.,0.,0.) ; // appel nécessaire (pourquoi?) à n'importe quelle fonction définie dans mathlib2.cpp
        try { // bloc try
             string msg_log= OK ;
             // etc...
    et alors tout compile sans aucun warning et s'exécute comme prévu. Cela m'énerve pas mal de ne pas comprendre pourquoi cela ne fonctionne pas sans une telle instruction bidon... Il faut avouer que je n'ai jamais trop cherché à savoir ce que c'est qu'un make
    "It MAKEs me cry!" comment chantaient les Beatles
    , c'est tellement plus facile d'appuyer sur les boutons magiques de QtCreator...

  2. #2
    Candidat au Club
    Homme Profil pro
    Ingénieur avant-vente
    Inscrit en
    Août 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur avant-vente
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2014
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Solution: changer l'ordre de déclaration des LIBS
    Surprenant mais vrai: l'ordre de déclaration des bibliothèques statiques est crucial pour linker. En inversant cet ordre dans mon pgi.pro, comme ceci:
    Code qt-pro : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LIBS += d:/Qt-apps/build-PhygenicLib-Desktop_Qt_5_5_1_MinGW_32bit-Debug/debug/libPhygenicLib.a \
            d:/Qt-apps/build-Mathlib2-Desktop_Qt_5_5_1_MinGW_32bit-Release/release/libMathlib2.a
    l'édition de liens se poursuit sans problème et sans avoir besoin d'une quelconque instruction bidon dans le main. La logique de tout cela m'échappe un peu mais bon, il suffit de le savoir...

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 16/07/2007, 16h33
  2. Réponses: 11
    Dernier message: 14/03/2007, 14h39
  3. Problème de lien avec une bibliothèque statique
    Par streetpc dans le forum C++/CLI
    Réponses: 2
    Dernier message: 28/10/2006, 17h38
  4. Liaison avec des images dans une table
    Par ValérieBruxelles dans le forum Access
    Réponses: 5
    Dernier message: 25/11/2005, 14h21
  5. Prbleme de liaison avec des doublons dans le fichier lié.
    Par krak70 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/10/2005, 11h03

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