Come compilare ed usare lib MIRACL in ubuntu?

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
mork_1
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 380
Iscrizione: venerdì 28 gennaio 2011, 17:32
Desktop: Gnome
Distribuzione: Ubuntu 22.04 LTS
Sesso: Maschile

Come compilare ed usare lib MIRACL in ubuntu?

Messaggio da mork_1 »

Salve a tutti!
Che dire, ci ho provato. Ma non riesco a venirne a capo, cercando in rete.
Voglio usare dei numeri interi 'grossi' (parlo di più di 308 cifre, molte di più) e mi servirebbero delle librerie che mi avete gentilmente consigliato. Una di queste è la MIRACL di Certivox.
Scaricata e posta nella directory di lavoro, non so evidentemente ben maneggiarla!
Ho visto che ci sono dei sorgenti già compilati nel pacchetto che ho scaricato e ho provato ad avviarne uno per studiarlo e quindi capire come usare questi BIG INT.

Uno a caso: fact.c

Codice: Seleziona tutto

/*
 *   Program to calculate factorials.
 */

#include <stdio.h>
#include "miracl.h"   /* include MIRACL system */

int main()
{ /* calculate factorial of number */
    big nf;           /* declare "big" variable nf */
    int n,m;
#if MIRACL==16
#ifdef MR_FLASH
    mirsys(500,10);    /* initialise system to base 10, 500 digits per "big" */
#else
    mirsys(5000,10);   /* bigger numbers possible if no flash arithmetic     */
#endif
#else
    mirsys(5000,10);  /* 5000 digits per "big" */
#endif
    nf=mirvar(1);     /* initialise "big" variable nf=1 */
    printf("factorial program\n");
    printf("input number n= \n");
    m=scanf("%d",&n);
    getchar();
    while (n>1) premult(nf,n--,nf);   /* nf=n!=n*(n-1)*(n-2)*....3*2*1  */
    printf("n!= \n");
    otnum(nf,stdout); /* output result */ 
    return 0;
}

Ma quando provo a compilarlo, ecco cosa succede:

Codice: Seleziona tutto

~/Documenti/programmi/Euler/MIRACL/source$ gcc ./fact.c -lm
./fact.c:6:50: fatal error: miracl.h: File o directory non esistente
 #include "miracl.h"   /* include MIRACL system */
                                                  ^
compilation terminated.
Qualcuno mi può aiutare?

Un grazie anticipatamente a tutti!
Ultima modifica di mork_1 il martedì 3 novembre 2015, 18:05, modificato 2 volte in totale.
"..il cielo stellato sopra di me e la legge morale dentro di me" (Immanuel Kant)

" Nosce te ipsum" (Socrate)
Avatar utente
telperion
Rampante Reduce
Rampante Reduce
Messaggi: 5407
Iscrizione: lunedì 10 luglio 2006, 18:20

Re: Usare librerie non standard in C [Linguaggio C]

Messaggio da telperion »

mork_1
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 380
Iscrizione: venerdì 28 gennaio 2011, 17:32
Desktop: Gnome
Distribuzione: Ubuntu 22.04 LTS
Sesso: Maschile

Re: Usare librerie non standard in C [Linguaggio C]

Messaggio da mork_1 »

Scusate, vi sembrerò impacciatissimo ma ho bisogno di fare anche errori per imparare :sisi:

Ho messo il sorgente fact.c nella stessa cartella dell'header miracl.h, ecco cosa succede:

Codice: Seleziona tutto

 gcc -I./ fact.c -o fact.x 
In file included from fact.c:6:0:
miracl.h:281:32: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘mr_large’
     typedef unsigned mr_dltype mr_large;
                                ^
miracl.h:350:5: error: unknown type name ‘mr_large’
     mr_large d;
     ^
miracl.h:395:13: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘length’
 mr_unsign64 length[2];
             ^
miracl.h:403:13: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘length’
 mr_unsign64 length;
             ^
In file included from fact.c:6:0:
miracl.h:896:38: error: expected ‘)’ before ‘big’
 extern void  dlconv(_MIPT_ mr_dltype,big);
                                      ^
Grazie a tutti ancora!
"..il cielo stellato sopra di me e la legge morale dentro di me" (Immanuel Kant)

" Nosce te ipsum" (Socrate)
Avatar utente
telperion
Rampante Reduce
Rampante Reduce
Messaggi: 5407
Iscrizione: lunedì 10 luglio 2006, 18:20

Re: Usare librerie non standard in C [Linguaggio C]

Messaggio da telperion »

mork_1 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4819326#p4819326][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Scusate, vi sembrerò impacciatissimo ma ho bisogno di fare anche errori per imparare :sisi:

Ho messo il sorgente fact.c nella stessa cartella dell'header miracl.h, ecco cosa succede:

Codice: Seleziona tutto

 gcc -I./ fact.c -o fact.x 
In file included from fact.c:6:0:
miracl.h:281:32: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘mr_large’
     typedef unsigned mr_dltype mr_large;
                                ^
miracl.h:350:5: error: unknown type name ‘mr_large’
     mr_large d;
     ^
miracl.h:395:13: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘length’
 mr_unsign64 length[2];
             ^
miracl.h:403:13: error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘length’
 mr_unsign64 length;
             ^
In file included from fact.c:6:0:
miracl.h:896:38: error: expected ‘)’ before ‘big’
 extern void  dlconv(_MIPT_ mr_dltype,big);
                                      ^
Grazie a tutti ancora!
Non saprei, ho provato a scaricare lo zip da
https://github.com/CertiVox/MIRACL

e poi come da
https://github.com/CertiVox/MIRACL/blob ... /linux.txt

ho fatto

Codice: Seleziona tutto

unzip -j -aa -L MIRACL*.zip
e

Codice: Seleziona tutto

bash linux64
ma non è andato a buon fine con un sacco di errori, e niente MIRACL library
mork_1
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 380
Iscrizione: venerdì 28 gennaio 2011, 17:32
Desktop: Gnome
Distribuzione: Ubuntu 22.04 LTS
Sesso: Maschile

Re: Usare librerie non standard in C [Linguaggio C]

Messaggio da mork_1 »

Era quello che sospettavo! La libreria ha degli errori.
Assurdo però, non me lo sarei mai aspettato. Come posso rimediare?
"..il cielo stellato sopra di me e la legge morale dentro di me" (Immanuel Kant)

" Nosce te ipsum" (Socrate)
Avatar utente
telperion
Rampante Reduce
Rampante Reduce
Messaggi: 5407
Iscrizione: lunedì 10 luglio 2006, 18:20

Re: Usare librerie non standard in C [Linguaggio C]

Messaggio da telperion »

mork_1 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4819470#p4819470][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Era quello che sospettavo! La libreria ha degli errori.
Assurdo però, non me lo sarei mai aspettato. Come posso rimediare?
Ti conviene cambiare il titolo in

Come compilare ed usare lib MIRACL in ubuntu?

Magari qualcuno sa darti le dritte.
Avatar utente
telperion
Rampante Reduce
Rampante Reduce
Messaggi: 5407
Iscrizione: lunedì 10 luglio 2006, 18:20

Re: Come compilare ed usare lib MIRACL in ubuntu?

Messaggio da telperion »

allora riscaricato MIRACL-master

scompattato nella cartella "test"
con

Codice: Seleziona tutto

unzip -j -aa -L  ../MIRACL-master.zip
 
dato poi nella cartella:

Codice: Seleziona tutto

bash linux64
tutto ok compilata la miracl.a e tutti gli esempi c e cpp senza errori.
spostati i 3 file:

Codice: Seleziona tutto

mc@debian64:~/Scrivania/111/mir$ ls -l
totale 584
-rw-r--r-- 1 mc mc 543504 nov  3 20:16 miracl.a
-rw-r--r-- 1 mc mc  46031 ago  6  2014 miracl.h
-rw-r--r-- 1 mc mc    319 nov  3 20:16 mirdef.h
in una cartella mir,
giusto per evitare casini con tutto quel bordello nella cartella 'test'.

Spostato l'esempio fact.c nella cartella superiore.
Per compilarlo (vedi il file linux64)

Codice: Seleziona tutto

gcc -Imir -m64 -O2 fact.c mir/miracl.a -o fact
ok
la miracl.a è statica,
quindi ciò che serve viene incorporato nell'eseguibile finale, senza problemi di lib PATH.

Codice: Seleziona tutto

c@debian64:~/Scrivania/111$ ./fact
factorial program
input number n= 
22
n!= 
1124000727777607680000
mc@debian64:~/Scrivania/111$ bash linux64
Immagine

Altro non so dirti.
mork_1
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 380
Iscrizione: venerdì 28 gennaio 2011, 17:32
Desktop: Gnome
Distribuzione: Ubuntu 22.04 LTS
Sesso: Maschile

Re: Come compilare ed usare lib MIRACL in ubuntu?

Messaggio da mork_1 »

Grazie per l'auto tel, ma c'è una cosa che non ho capito.

Cosa è questo?

Codice: Seleziona tutto

bash linux64

E soprattutto come lo dai?
Se mi sposto nella cartella miracl-master e lancio quel comando da terminale mi dice:

Codice: Seleziona tutto

$ bash linux64
/usr/bin/linux64: /usr/bin/linux64: impossibile eseguire il file binario
"..il cielo stellato sopra di me e la legge morale dentro di me" (Immanuel Kant)

" Nosce te ipsum" (Socrate)
Avatar utente
telperion
Rampante Reduce
Rampante Reduce
Messaggi: 5407
Iscrizione: lunedì 10 luglio 2006, 18:20

Re: Come compilare ed usare lib MIRACL in ubuntu?

Messaggio da telperion »

mork_1 [url=http://forum.ubuntu-it.org/viewtopic.php?p=4820645#p4820645][img]http://forum.ubuntu-it.org/images/icons/icona-cita.gif[/img][/url] ha scritto:Grazie per l'auto tel, ma c'è una cosa che non ho capito.

Cosa è questo?

Codice: Seleziona tutto

bash linux64

E soprattutto come lo dai?
Se mi sposto nella cartella miracl-master e lancio quel comando da terminale mi dice:

Codice: Seleziona tutto

$ bash linux64
/usr/bin/linux64: /usr/bin/linux64: impossibile eseguire il file binario
linux64 (se il tuo sistema operativo è 64 bit) o linux (se 32 bit) sono due file presenti nella cartella dove hai scompattato lo zip.

Codice: Seleziona tutto

bash linux64
esegue quello script che compila tutto, libreria ed esempi c e c++, e da quel file ho visto come compilare fact.c.

di solito si usa
-Imir -Lmir -lmiracl
(nel mio esempio precedente) ma non funziona, non trova la lib, per qualche motivo a me sconosciuto bisogna usare
-Imir fact.c mir/miracl.a
come si vede nei file linux64 o linux appunto:

linux64
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 1 ospite