librairie GMP (et incompétance...).
Le
Tanguy Briançon

Bonjour,
J'ai télécharger puis installer la librairie gmp
en faisant la trilogie
./configure
make
make install
Puis j'ai fait:
> gcc primes.c primes.o
> gcc: primes.o : Aucun fichier ou dossier de ce type
> [briancon@localhost demos]$ gcc primes.c -o primes.o
> /home/briancon/tmp/ccAUbHqN.o: In function `report':
> primes.c:(.text+0x34): undefined reference to `__gmpz_out_str'
> primes.c:(.text+0x5d): undefined reference to `__gmpz_get_ui'
> primes.c:(.text+0x85): undefined reference to `__gmpz_get_ui'
> /home/briancon/tmp/ccAUbHqN.o: In function `main':
> collect2: ld a retourné 1 code d'état d'exécution
Il doit y avoir un truc idiot j'ai du oublié de faire?
Le début du fichier primes.c
>
> #include <stdlib.h>
> #include <stdio.h>
> #include <string.h>
> #include <math.h>
> #include <assert.h>
puis des commentaires et
#include "gmp.h"
Le programme suivant compile
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <assert.h>
#include "gmp.h"
void main()
{ printf("Hello world");}
J'ai télécharger puis installer la librairie gmp
en faisant la trilogie
./configure
make
make install
Puis j'ai fait:
> gcc primes.c primes.o
> gcc: primes.o : Aucun fichier ou dossier de ce type
> [briancon@localhost demos]$ gcc primes.c -o primes.o
> /home/briancon/tmp/ccAUbHqN.o: In function `report':
> primes.c:(.text+0x34): undefined reference to `__gmpz_out_str'
> primes.c:(.text+0x5d): undefined reference to `__gmpz_get_ui'
> primes.c:(.text+0x85): undefined reference to `__gmpz_get_ui'
> /home/briancon/tmp/ccAUbHqN.o: In function `main':
> collect2: ld a retourné 1 code d'état d'exécution
Il doit y avoir un truc idiot j'ai du oublié de faire?
Le début du fichier primes.c
>
> #include <stdlib.h>
> #include <stdio.h>
> #include <string.h>
> #include <math.h>
> #include <assert.h>
puis des commentaires et
#include "gmp.h"
Le programme suivant compile
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <assert.h>
#include "gmp.h"
void main()
{ printf("Hello world");}
Humm, ici, on produit un exécutable du nom de primes.o -- c'est étrange :)
Il vaudrait mieux:
gcc primes.c primes
(produire un exécutable -- il manque un -lgmp probablement ici)
-ou-
gcc -c primes.c -o primes.o
puis gcc -shared -fPIC primes.o -lgmp -o primes
Et je conseillerai d'utiliser au minimum:
-W -Wall
Humm, ici, on produit un exécutable du nom de primes.o -- c'est étrange :)
Il vaudrait mieux:
gcc primes.c -lgmp -o primes
(produire un exécutable -- il manque un -lgmp probablement ici)
-ou-
gcc -c primes.c -o primes.o
puis gcc -shared -fPIC primes.o -lgmp -o primes
Et je conseillerai d'utiliser au minimum:
-W -Wall
pour repérer les fautes les plus évidentes dans le code C.
^^^^^^^^^^^^^
Pourquoi faut-il ces options, là ?
Chez moi cela construit une DLL avec extension .exe, et l'OS me dit
« primes.exe n'est pas une application valide. »
Antoine
Il ne faut pas, je ne sais pas ce qu'il a fume.
-shared -fPIC, ca sert uniquement a faire des bibliotheques ("shared objects"
chez ELF), et je ne vois pas du tout ce que ca vient faire la.
Perso, ca me fait toujours tout bizarre d'avoir la ligne de gcc dans un
ordre non "traditionnel".
Quasiment tout le monde ecrit
gcc -o primes -O2 -W -Wall primes.c -lgmp
Oui, j'étais parti sur la construction d'une lib, autant pour moi.
Ça m'apprendra à ne pas me relire suffisamment :)