Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/11/2012, 11h22   #1
ikuzar
Membre actif
 
Étudiant
Inscription : décembre 2007
Messages : 614
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2007
Messages : 614
Points : 189
Points : 189
Envoyer un message via MSN à ikuzar
Par défaut "undefined reference" Vs "undefined symbol"

Bonjour,

J'aimerais savoir quelle est la différence entre

"undefined reference" et "undefined symbol". Je sais que undefined reference c'est quand le linker ne trouve pas l'endroit ou est défini la fonction mais undefined symbol c'est quoi alors ?

Merci d'avance pour votre aide
ikuzar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 11h55   #2
Bktero
Expert Confirmé Sénior
 
Avatar de Bktero
 
Ingénieur systèmes embarqués
Inscription : juin 2009
Messages : 1 698
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur systèmes embarqués
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 698
Points : 4 143
Points : 4 143
Quel compilateur utilises-tu ? As-tu un exemple de code générant le message "undefined symbol" ? Je n'ai pas du tout l'habitude de le voir, perso.
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 13h58   #3
ikuzar
Membre actif
 
Étudiant
Inscription : décembre 2007
Messages : 614
Détails du profil
Informations personnelles :
Âge : 27

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2007
Messages : 614
Points : 189
Points : 189
Envoyer un message via MSN à ikuzar
J'ai complié mon code et généré un executable sur ma machine (Ubuntu 10.04 - x86_64). J'ai copié l'exécutable sur une autre machine Debian (Debian GNU/Linux 5.0 - x86_64) afin de le lancer dessus.

Sur ma machine, j'ai gcc 4.4.3:
Code :
1
2
3
4
5
6
7
gcc:
  Installé*: 4:4.4.3-1ubuntu1
  Candidat*: 4:4.4.3-1ubuntu1
 Table de version*:
 *** 4:4.4.3-1ubuntu1 0
        500 http://fr.archive.ubuntu.com/ubuntu/ lucid/main Packages
        100 /var/lib/dpkg/status
sur la machine Debian:
Code :
1
2
3
4
5
6
7
gcc:
  Installé*: 4:4.3.2-2
  Candidat*: 4:4.3.2-2
 Table de version*:
 *** 4:4.3.2-2 0
        500 http://archive.debian.org lenny/main Packages
        100 /var/lib/dpkg/status
c'est une fonction de la librairie pcap (libpcap) que le linker ne trouve pas. Il s'agit de pcap_create:
Code :
symbol lookup error: /home/moimeme/monappli/bin/test_exe: undefined symbol: pcap_create
Sur la machine Debian, un donne (pour pcap):
Code :
libpcap.so.0.8 => /usr/lib/libpcap.so.0.8 (0x00007ff66e7b5000)
Sur Ubuntu, un donne(pour pcap):
Code :
libpcap.so.0.8 => /usr/lib/libpcap.so.0.8 (0x00007faa2b141000)
ikuzar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 14h42   #4
leternel
Membre Expert
 
Homme Pierre
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 1 178
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Localisation : France

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

Informations forums :
Inscription : juin 2007
Messages : 1 178
Points : 2 491
Points : 2 491
je pense que c'est du à la version de ld qui n'est pas la meme.

au passage, gcc 4.3.2, ce n'est pas un peu vieux? j'en suis à la 4.7.2
__________________
Mes principes de bases du codeur qui veut pouvoir dormir:
  • Une variable de moins est une source d'erreur en moins.
  • Un pointeur de moins est une montagne d'erreurs en moins.
  • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
  • La plus sotte des questions est celle qu'on ne pose pas.
leternel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2012, 15h18   #5
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 612
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur d'emploi
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2007
Messages : 4 612
Points : 11 081
Points : 11 081
Hello,

Tu obtiens ce message quand le symbole existe mais qu'il n'est pas défini, c'est-à-dire qu'il ne lui est pas associée une valeur utilisable. Ça arrive notamment lorsque l'on essaie d'appeler une fonction locale à un module (déclarée static) comme indiqué notamment ici.

Ceci dit, dans le cas qui nous intéresse, pcap_create() est tout-à-fait légitime. Est-ce que tu ne serais pas en train, par exemple, de lier une application 64 bits vers une bibliothèque 32 bits ? (C'est une vraie question : je n'ai pas fait le test moi-même).
Obsidian est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h01.


 
 
 
 
Partenaires

Hébergement Web