Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
linkage
Envoyé par: bloodaxe

Bonjour, je me lance dans la programmation linux et voila deja les 1ere soucis lol. alor je compile sans prob ca me fait bien le fichier objet, mais lorsque que je veu linker ca me fait ca
essai.o(.text+0x16): In function `main':
: undefined reference to `XOpenDisplay'
essai.o(.text+0x81): In function `main':
: undefined reference to `XCreateSimpleWindow'
essai.o(.text+0x95): In function `main':
: undefined reference to `XMapWindow'
essai.o(.text+0xa8): In function `main':
: undefined reference to `XSelectInput'
essai.o(.text+0xba): In function `main':
: undefined reference to `XNextEvent'
essai.o(.text+0xc8): In function `main':
: undefined reference to `XFlush'
collect2: ld returned 1 exit status
[root@localhost essai$]# g++ /usr/X11R6/lib/ essai.o
/usr/X11R6/lib/: file not recognized: Is a directory
collect2: ld returned 1 exit status
pourtt a l'appelle de gcc je fai ca:

g++ -L /usr/X11R6/lib/ essai.o -o essai

la location des librairies doit etre bonne g verifier avec locate

c un programme en xlib si quelqu'un peu m'aider merci sa me fait exactement pareil avec un autre programme en qt3. je suis sous md9.2

Poste le Tuesday 10 February 2004 22:16:06
Répondre     Citer    
Re: linkage
Envoyé par: svear

Je pense que tes fonctions "XOpenDisplay", "XMapWindow", "XSelectInput"; enfin toutes les fonctions non définies font partie d'une librairie mais comme je ne sais pas laquelle je vais la symboliser par "/usr/X11R6/lib/Xlib.a"

Il faut, lorsque tu compiles ton programme, que tu lui dises dans quelle librairie il trouvera ces fonctions spéciales. le compilateur n'inclut par défaut que la librairie principale du C "/usr/lib/libc.a". Si tu en utilises d'autres, tu dois les indiquer explicitement.

Tu dois compiler ton programme en utilisant la syntaxe suivante:
g++ -c essai.c
g++ /usr/X11R6/lib/Xlib.a essai.o -o essai

Ou bien alors, si tu n'as qu'un seul fichier source
g++ /usr/X11R6/lib/Xlib.a essai.c -o essai

Si t'as d'autres librairies à indiquer, tu peux les mettre à la suite de la première. Ex:
g++ /usr/X11R6/lib/Xlib.a /usr/lib/libm.a /usr/lib/libc.a essai.c -o essai

Pour QT, t'auras le même problème. Il faut que tu compiles ton programme en lui disant où se trouve la librairie QT

Parfois une librairie se nomme ".so" et pas ".a" (comme QT par exemple). Il s'agit alors d'une librairie dynamique. Elle ne sera pas incluse au code exécutable donc tu devras avoir la librairie sur ta machine si tu exécute le programme
1) Tu compiles comme ci-dessus en y indiquant le nom de la librairie (le nom .so)
2) Tu vérifies que ta variable "LDPATH" contient bien tous les répertoires suceptibles de contenir une librairie ".so"; chaque répertoire séparé du suivant par ":"

Et normallement, tu ne devrais plus avoir de pb...

Poste le Saturday 14 February 2004 01:30:21
Répondre     Citer    
Re: linkage
Envoyé par: bloodaxe

si j'ai bien compris les librairie QT sont dans /usr/lib/qt3/lib mais lorsque je compile il me dit

/usr/lib/qt3/lib: file not recognized: Is a directory
collect2: ld returned 1 exit status

pourquoi il ne les trouvent pas

Poste le Saturday 14 February 2004 14:32:13
Répondre     Citer    
Re: linkage
Envoyé par: svear

Il faut que tu compiles en mettant le nom de la librairie et pas seulement le répertoire dans lequel elle se trouve !!!
Style
g++ /usr/lib/qt3/lib/libqt.so essai.c -o essai

Ensuite, il faut que ta variable "LDPATH" contienne le répertoire dans lequel se trouve ta librairie; donc
export LDPATH="/usr/lib/qt3/lib:$LDPATH"

Ensuite, ça devrait fonctionner

Poste le Saturday 14 February 2004 21:57:08
Répondre     Citer    
Re: linkage
Envoyé par: bloodaxe

j'ai fai une recherche sur le fichier libqt.so je ne le trouve nul part

Poste le Saturday 14 February 2004 22:04:25
Répondre     Citer    
Re: linkage
Envoyé par: svear

J'ai mis "libqt.so" de mémoire. Essaye plutot de rechercher *.so" et/ou "*.a" à partir de "/usr/lib/qt3/lib"...

find /usr/lib/qt3/lib -name "*.so -o -name "*.a" -print

Poste le Saturday 14 February 2004 22:13:28
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
linkage
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons