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 :

[Du nouveau !] Pb édition de liens avec libmysqlclient.a


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Par défaut [Du nouveau !] Pb édition de liens avec libmysqlclient.a
    Bonjour,


    Je travaille sous Solaris 5.8. Sur la machine y'a g++ d'installer en version 2.7.2 () et CC, donc c'est CC que j'utilise pour compiler mon code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CC -V
    CC: Sun WorkShop 6 update 1 C++ 5.2 Patch 109508-08 2002/03/07
    Mon makefile est le suivant :

    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
     
    CC=CC
    CFLAGS=-I/home/xxx/libSql/include/ -I/home/xxx/libSql/include/mysql/
    LDFLAGS=-L/home/xxx/libSql/lib/ -lmysqlclient 
     
    all: main
     
    main: main.o LibSql.o
    	@echo "--------------------"
    	@echo "-       MAIN       -"
    	@echo "--------------------"
    	$(CC) $(LDFLAGS) -o main bin/main.o bin/LibSql.o
     
    main.o: main.cc
    	@echo "--------------------"
    	@echo "-      MAIN.o      -"
    	@echo "--------------------"
    	$(CC) $(CFLAGS) -o bin/main.o -c main.cc 
     
    LibSql.o: src/LibSql.cc
    	@echo "--------------------"
    	@echo "-     LibSQL.o     -"
    	@echo "--------------------"
    	$(CC) $(CFLAGS) -o bin/LibSql.o -c src/LibSql.cc 
     
    clean:
    	rm -f bin/*.o
    Lorsque je fais 'gmake', voici les résultats :

    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
     
    --------------------
    -      MAIN.o      -
    --------------------
    CC -I/home/xxx/libSql/include/ -I/home/xxx/libSql/include/mysql/ -o bin/main.o -c main.cc 
    --------------------
    -     LibSQL.o     -
    --------------------
    CC -I/home/xxx/libSql/include/ -I/home/xxx/libSql/include/mysql/ -o bin/LibSql.o -c src/LibSql.cc 
    --------------------
    -       MAIN       -
    --------------------
    CC -L/home/xxx/libSql/lib/ -lmysqlclient  -o main bin/main.o bin/LibSql.o
    Undefined                       first referenced
     symbol                             in file
    mysql_rollback                      bin/LibSql.o
    mysql_stmt_init                     bin/LibSql.o
    mysql_close                         bin/LibSql.o
    mysql_fetch_lengths                 bin/LibSql.o
    mysql_num_fields                    bin/LibSql.o
    mysql_num_rows                      bin/LibSql.o
    mysql_fetch_row                     bin/LibSql.o
    mysql_real_query                    bin/LibSql.o
    mysql_real_connect                  bin/LibSql.o
    mysql_commit                        bin/LibSql.o
    mysql_stmt_close                    bin/LibSql.o
    mysql_fetch_field                   bin/LibSql.o
    mysql_stmt_error                    bin/LibSql.o
    mysql_stmt_execute                  bin/LibSql.o
    mysql_autocommit                    bin/LibSql.o
    mysql_errno                         bin/LibSql.o
    mysql_stmt_param_count              bin/LibSql.o
    mysql_error                         bin/LibSql.o
    mysql_store_result                  bin/LibSql.o
    mysql_affected_rows                 bin/LibSql.o
    mysql_stmt_prepare                  bin/LibSql.o
    mysql_stmt_bind_param               bin/LibSql.o
    mysql_init                          bin/LibSql.o
    ld: fatal: Symbol referencing errors. No output written to main
    gmake: *** [main] Error 1
    Le fichier libmysqlclient.a est pourtant bien présent dans le répertoire lib/ que je précise. De plus lorsque je fais 'nm lib/libmysqlclient.a | grep mysql_init' par exemple j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [197]   |         0|       0|FUNC |GLOB |0    |UNDEF  |mysql_init
    [120]   |      7892|     224|FUNC |GLOB |0    |2      |mysql_init
    [134]   |      8724|     516|FUNC |GLOB |0    |2      |mysql_init_character_set
    Ceci prouve bien que les symboles existent, non ? J'ai essayé avec une version 32 bits de la libmysqlclient.a, une 64 bits, pour les version 5.9, 5.10 de solaris ... bref je comprends pas le problème ...


    Merci de m'éclairer sur le sujet

    edit : Faute de place sur le serveur, je ne peux compiler la librairie via les sources de MySQL, donc je télécharge la version 5.8 64 bits de MySQL et je récupère la bibliothèque contenue dans le .tar, peut-être est-ce cela ?

  2. #2
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Par défaut

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Difficile de se prononcer sans connaître bien la lib SQL... mais juste comme ça, n'y aurait-il pas un namespace particulier dans la version que tu utilises ?

  4. #4
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Par défaut
    non je crois pas.

    Ce projet se compilait sans problème, avec g++, sous une machine Linux, sur laquelle le serveur MySQL était installé.

  5. #5
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Par défaut
    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
     
    --------------------
    -      MAIN.o      -
    --------------------
    CC -xtarget=ultra -xarch=v8 -I/home/xxx/libSql/include/ -I/home/xxx/libSql/include/mysql/ -o bin/main.o -c main.cc 
    --------------------
    -     LibSQL.o     -
    --------------------
    CC -xtarget=ultra -xarch=v8 -I/home/xxx/libSql/include/ -I/home/xxx/libSql/include/mysql/ -o bin/LibSql.o -c src/LibSql.cc 
    --------------------
    -       MAIN       -
    --------------------
    CC -o main -Bstatic bin/main.o bin/LibSql.o -xtarget=ultra -xarch=v8 -L/home/xxx/libSql/lib/ -lmysqlclient -lz
    ld: warning: file /home/xxx/libSql/lib//libmysqlclient.a(libmysql.o): wrong ELF class: ELFCLASS64
    Undefined                       first referenced
     symbol                             in file
    mysql_rollback                      bin/LibSql.o
    mysql_stmt_init                     bin/LibSql.o
    mysql_close                         bin/LibSql.o
    mysql_fetch_lengths                 bin/LibSql.o
    mysql_num_fields                    bin/LibSql.o
    mysql_num_rows                      bin/LibSql.o
    mysql_fetch_row                     bin/LibSql.o
    mysql_real_query                    bin/LibSql.o
    mysql_real_connect                  bin/LibSql.o
    mysql_commit                        bin/LibSql.o
    mysql_stmt_close                    bin/LibSql.o
    mysql_fetch_field                   bin/LibSql.o
    mysql_stmt_error                    bin/LibSql.o
    mysql_stmt_execute                  bin/LibSql.o
    mysql_autocommit                    bin/LibSql.o
    mysql_errno                         bin/LibSql.o
    mysql_stmt_param_count              bin/LibSql.o
    mysql_error                         bin/LibSql.o
    mysql_store_result                  bin/LibSql.o
    mysql_affected_rows                 bin/LibSql.o
    mysql_stmt_prepare                  bin/LibSql.o
    mysql_stmt_bind_param               bin/LibSql.o
    mysql_init                          bin/LibSql.o
    ld: fatal: Symbol referencing errors. No output written to main
    *** Error code 1
    make: Fatal error: Command failed for target `main'
    Bon y'a ça de nouveau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ld: warning: file /home/xxx/libSql/lib//libmysqlclient.a(libmysql.o): wrong ELF class: ELFCLASS64
    Normallement, je suis en SPARC et en 64 Bits. J'ai vérifié en faisant 'version'. Pour le 64 bits, j'ai fait 'isainfo -b' et il me retourne 64.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Machine hardware:   sun4u
    OS version:         5.8
    Processor type:     sparc
    Hardware:           SUNW,Sun-Blade-1000
    Donc j'ai télécharger ce fichier http://dev.mysql.com/get/Downloads/M....fr/pub/MySQL/ et j'ai copié l'ensemble des fichiers du répertoire lib, dans le répertoire lib de mon projet ... Malgré cela on dirait une erreur d'architecture 32/64, non ?

    Les options de compilation vous semblent-t-elles correctes pour du 64 bits ?

    Merci de m'aider car je patauge sur le problème depuis plus d'une journée maintenant ...

  6. #6
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Par défaut
    Par désespoir je suis allé sur un autre serveur ... . J'utilise cette fois-ci la version 32 bits de la libmysqlclient.a et le compilateur g++

    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
    --------------------
    -      MAIN.o      -
    --------------------
    g++ -o bin/main.o -c main.cc -Wall -ansi -I/home/xxx/libSql/include/ -I/home/xxx/libSql/include/mysql/
    --------------------
    -     LibSQL.o     -
    --------------------
    g++ -o bin/LibSql.o -c src/LibSql.cc -Wall -ansi -I/home/xxx/libSql/include/ -I/home/xxx/libSql/include/mysql/
    --------------------
    -       MAIN       -
    --------------------
    g++ -o main bin/main.o bin/LibSql.o -L/home/xxx/libSql/lib/ -lmysqlclient -lz
    Undefined                       first referenced
     symbol                             in file
    socket                              /home/xxx/libSql/lib//libmysqlclient.a(client.o)
    getpeername                         /home/xxx/libSql/lib//libmysqlclient.a(viosocket.o)
    recv                                /home/xxx/libSql/lib//libmysqlclient.a(socket_wrapper.o)
    gethostbyname_r                     /home/xxx/libSql/lib//libmysqlclient.a(client.o)
    send                                /home/xxx/libSql/lib//libmysqlclient.a(socket_wrapper.o)
    setsockopt                          /home/xxx/libSql/lib//libmysqlclient.a(viosocket.o)
    getservbyname                       /home/xxx/libSql/lib//libmysqlclient.a(libmysql.o)
    inet_addr                           /home/xxx/libSql/lib//libmysqlclient.a(client.o)
    inet_ntoa                           /home/xxx/libSql/lib//libmysqlclient.a(my_net.o)
    shutdown                            /home/xxx/libSql/lib//libmysqlclient.a(viosocket.o)
    connect                             /home/xxx/libSql/lib//libmysqlclient.a(client.o)
    ld: fatal: Symbol referencing errors. No output written to main
    collect2: ld returned 1 exit status
    *** Error code 1
    make: Fatal error: Command failed for target `main'
    Que signifie les fichiers .o après le nom de la librairie, ce ne sont pas des fichiers de mon projet ...

Discussions similaires

  1. compilaton et édition de liens avec g++
    Par [Hugo] dans le forum C++
    Réponses: 12
    Dernier message: 26/10/2007, 19h58
  2. BLAS: édition de liens avec libcblas.a
    Par micheldup dans le forum C++
    Réponses: 2
    Dernier message: 10/10/2007, 01h21
  3. Ordre de l'édition des liens avec GCC
    Par Matthieu Brucher dans le forum Linux
    Réponses: 6
    Dernier message: 29/08/2006, 07h56
  4. Erreur d'édition de liens avec __imp__RegCloseKey
    Par gdpasmini dans le forum MFC
    Réponses: 2
    Dernier message: 23/03/2006, 14h18
  5. Problème à l'édition des liens avec BCC55 et Xerces
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/11/2003, 14h50

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