Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

lib gmp

36 réponses
Avatar
remy
bonjour

je cherche à faire fonctionner l'exemple
qu'il y a dans le répertoire démo de la librairie gmp
http://gmplib.org/

ou en gros après installation

./configure
./make
sudo ./make installe

sudo make check

remy@remy-desktop:~/Desktop/Mydriver2$ locate gmp.h
/usr/local/include/gmp.h
...



gedit test.c



#include <stdlib.h>
#include <string.h>
#include <stdio.h>
//#include "gmp.h"

#include "/usr/local/include/gmp.h"

int main (int argc, char **argv)
{
mpz_t n;

mpz_init (n);
}


remy@remy-desktop:~/Desktop/Mydriver2$ cc test.c
/tmp/ccISe3aS.o: In function `main':
test.c:(.text+0x18): undefined reference to `__gmpz_init'
collect2: ld a retourné 1 code d'état d'exécution
remy@remy-desktop:~/Desktop/Mydriver2$


en gros il ne trouve pas les objets pour le linchage
ce que me confirme locate gmp.o

et pour finir j'ai les mêmes problèmes si je passe par une installation
dite normale avec synaptie

je me permets de rajouter que le c et les environnements ne sont pas ma
tasse de thé donc
l'on y va doucement même tout doucement dans les explications

merci

remy

os Ubuntu 7.04 Feisty Fawn

10 réponses

1 2 3 4
Avatar
candide
remy a écrit :

./configure
./make
sudo ./make installe

sudo make check

:~/Desktop/Mydriver2$ locate gmp.h
/usr/local/include/gmp.h
...





Tu aimes vivre dangereusement. Moi j'ai installé gmp au clickodrome Synaptic




#include <stdlib.h>
#include <string.h>
#include <stdio.h>
//#include "gmp.h"

#include "/usr/local/include/gmp.h"

int main (int argc, char **argv)
{
mpz_t n;

mpz_init (n);
}




Heu là tu m'etonnes, je doute que ce soit l'exemple de test original,
d'abord en général ces exemples de tests sont évidemment ultra surchargé
et ensuite le code ci-dessus contient des comportements indéterminés.




en gros il ne trouve pas les objets pour le linchage
ce que me confirme locate gmp.o





et pour finir j'ai les mêmes problèmes si je passe par une installation
dite normale avec synaptie



Je te rappelle que pour linker gmp, il faut terminer par -lm dans la
ligne de commande, exemple chez moi :

$ gcc -o x test.c -lgmp
Avatar
candide
candide a écrit :

Je te rappelle que pour linker gmp, il faut terminer par -lm dans la



correction : lire : -lgmp

comme dans l'exemple donné en dessous.

ligne de commande, exemple chez moi :

$ gcc -o x test.c -lgmp


Avatar
espie
In article <g93310$9sp$, remy ;> wrote:
bonjour

je cherche à faire fonctionner l'exemple
qu'il y a dans le répertoire démo de la librairie gmp
http://gmplib.org/

ou en gros après installation

./configure
./make
sudo ./make installe



En tres gros alors, hein. Meme s'il y a des francais dans le lot, ca
m'etonnerait que make installe fonctionne...
Avatar
remy
candide a écrit :


Tu aimes vivre dangereusement. Moi j'ai installé gmp au clickodrome
Synaptic




avec le clickodrome je ne sais pas sur quoi agir qd cela ne marche pas
même si je doute que cela vienne de mon inexpérience




Heu là tu m'etonnes, je doute que ce soit l'exemple de test original,
d'abord en général ces exemples de tests sont évidemment ultra surchargé
et ensuite le code ci-dessus contient des comportements indéterminés.




exact c'était juste un test histoire d'avancer




Je te rappelle que pour linker gmp, il faut terminer par -lm dans la
ligne de commande, exemple chez moi :

$ gcc -o x test.c -lgmp



ok merci

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
//#include "gmp.h"

#include "/usr/local/include/gmp.h"

int main (void)
{
mpz_t n;
mpz_init (n);

int class;
if (mpz_set_str (n, "3623", 0) != 0) puts (" pb init");;

class = mpz_probab_prime_p (n, 5);

if (class == 0)
puts (" merde");
else if (class == 1)
puts (" ok ");

}

gcc essai.c -lgmp -o essai

compilation ok

:~/Desktop/Mydriver2$ ./essai
./essai: error while loading shared libraries: libgmp.so.3: cannot open
shared object file: No such file or directory
:~/Desktop/Mydriver2$


.../Mydriver2$ locate libgmp
/usr/local/lib/libgmp.so.3.4.3
/usr/local/lib/libgmp.so
/usr/local/lib/libgmp.so.3
/usr/local/lib/libgmp.la
/usr/local/lib/libgmp.a
/usr/lib/ssl/engines/libgmp.so
....
.../Mydriver2$ path=/usr/local/lib:$PATH
.../Mydriver2$ export path
:~/Desktop/Mydriver2$ ./essai
./essai: error while loading shared libraries: libgmp.so.3: cannot open
shared object file: No such file or directory
:~/Desktop/Mydriver2$


donc la compilation passe bien mais pas l'exécution une idée peut être

merci remy
Avatar
espie
In article <g93co8$d3l$, remy ;> wrote:
./essai: error while loading shared libraries: libgmp.so.3: cannot open
shared object file: No such file or directory
:~/Desktop/Mydriver2$


donc la compilation passe bien mais pas l'exécution une idée peut être

merci remy



faut que tu expliques a ton systeme que la bibliotheque est accessible.
Soit un probleme de path de bibliotheques partagees, soit un probleme
de cache.

RTFM, man ldconfig
Avatar
Thierry B.
--{ remy a plopé ceci: }--

:~/Desktop/Mydriver2$ ./essai
./essai: error while loading shared libraries: libgmp.so.3: cannot open
shared object file: No such file or directory



Où est le _vrai_ rapport avec le langage C ?

.../Mydriver2$ export path



OK, c'est bon, tu fais du shot-gun programming.

--
:/u/tth/Animations/Parking$ uptime
16:37:12 up 80 days, 21:15, 21 users, load average: 10.36, 8.64, 7.46
Avatar
remy
Marc Espie a écrit :
In article <g93co8$d3l$, remy ;> wrote:
./essai: error while loading shared libraries: libgmp.so.3: cannot open
shared object file: No such file or directory
:~/Desktop/Mydriver2$


donc la compilation passe bien mais pas l'exécution une idée peut être

merci remy



faut que tu expliques a ton systeme que la bibliotheque est accessible.
Soit un probleme de path de bibliotheques partagees, soit un probleme
de cache.

RTFM, man ldconfig



ok maintenant cela semble fonctionner je dirais même que cela fonctionne



:~/Desktop/Mydriver2$ gcc essai.c -lgmp -o essai
:~/Desktop/Mydriver2$ ./essai
ok class= 2
:~/Desktop/Mydriver2$

mais cela n'est que la première étape
le but du jeu étant de se servir de cette librairie dans un module du noyau

donc
#include "/usr/local/include/gmp.h"
....
ssize_t my_read( struct file *p_file, char __user * p_data, size_t size,
loff_t* p_offset )
{
mpz_t n;
mpz_init (n);
return 1;
}


par exemple

avec 2 fichiers récupérés et modifiés un peu au pif
le premier makefile

#
# Makefile pour driver a la sauce remy
#

#ifndef KERNEL_SOURCE
KERNEL_SOURCE=/lib/modules/`uname -r`/build/
#endif

#ifndef KERNEL_VERSION
KERNEL_VERSION=$(basename $(shell uname -r))
#endif

#ifndef FIRMWARE
FIRMWARE=zd1201.fw zd1201-ap.fw
#endif

ifneq ($(KERNEL_VERSION),2.6)
$(error Kernel version ${KERNEL_VERSION} not supported by this driver.)
endif

INSTALL = cp -p -f

default: modules

modules:
make -C ${KERNEL_SOURCE} M=${PWD} modules

clean:
make -C ${KERNEL_SOURCE} M=${PWD} clean

install: modules_install

modules_install:
make -C ${KERNEL_SOURCE} M=${PWD} modules_install


et un deuxième
Makefile
obj-m := Mydriver.o

cela fonctionne très bien
/Mydriver2$ make
make -C /lib/modules/`uname -r`/build/ M=/home/remy/Desktop/Mydriver2
modules
make[1]: entrant dans le répertoire «
/usr/src/linux-headers-2.6.20-17-generic »
CC [M] /home/remy/Desktop/Mydriver2/Mydriver.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/remy/Desktop/Mydriver2/Mydriver.mod.o
LD [M] /home/remy/Desktop/Mydriver2/Mydriver.ko
make[1]: quittant le répertoire «
/usr/src/linux-headers-2.6.20-17-generic »
:~/Desktop/Mydriver2$

par contre avec les 2 lignes rajoutées dans le code

mpz_t n;
mpz_init (n);

:~/Desktop/Mydriver2$ make
make -C /lib/modules/`uname -r`/build/ M=/home/remy/Desktop/Mydriver2
modules
make[1]: entrant dans le répertoire «
/usr/src/linux-headers-2.6.20-17-generic »
CC [M] /home/remy/Desktop/Mydriver2/Mydriver.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: "__gmpz_init" [/home/remy/Desktop/Mydriver2/Mydriver.ko]
undefined!
LD [M] /home/remy/Desktop/Mydriver2/Mydriver.ko
make[1]: quittant le répertoire «
/usr/src/linux-headers-2.6.20-17-generic »
:~/Desktop/Mydriver2$

je retrouve mon problème je suppose qu'il faut que je modifie le
makefile au niveau de la commande make une idée sur la modif
parce que moi ....

merci remy
Avatar
candide
remy a écrit :
:~/Desktop/Mydriver2$ ./essai
./essai: error while loading shared libraries: libgmp.so.3: cannot open
shared object file: No such file or directory
:~/Desktop/Mydriver2$





Bienvenue sous DOS 6.0 ;)

Bon, j'avais bien raison de dire que tu vis dangereusement. Chez moi, le
code s'exécute mais le sale boulot a été fait automatiquement par
Synaptic. Si tu n'as pas de retour ici, pose ta question sur le
siteduzero, forum C ou forum Linux/mac.
Avatar
candide
Marc Espie a écrit :

faut que tu expliques a ton systeme que la bibliotheque est accessible.
Soit un probleme de path de bibliotheques partagees, soit un probleme
de cache.

RTFM, man ldconfig




Voilà aussi pourquoi le C est si long à apprendre.
Avatar
espie
In article <48b55c8a$0$12757$,
candide wrote:
Marc Espie a écrit :

faut que tu expliques a ton systeme que la bibliotheque est accessible.
Soit un probleme de path de bibliotheques partagees, soit un probleme
de cache.

RTFM, man ldconfig




Voilà aussi pourquoi le C est si long à apprendre.



Ca, c'est du unix, pas du C...

accessoirement, pour installer une bibliotheque tres standard, genre gmp,
le faire a la main, c'est... bizarre.
1 2 3 4