J'ai écrit une fonction de décryptage en utilisant openssl que j'ai testé dans un programme autonome et cela a bien fonctionné. Mais cette fonction fait partie d'un énorme projet et doit donc être incluse dans ce programme. Pour exécuter mon programme autonome j'ai utilisé les commandes suivantes qui a bien fonctionné:Comment lier les fichiers de bibliothèque pour un programme C dans makefile sous UNIX?
cc -c aaa.c -I/usr/local/ssl/include
gcc -o aaa aaa.o -I/usr/local/ssl/include -L/usr/local/ssl/lib -lcrypto -lm
./aaa
J'ai fait un makefile pour mon programme principal à l'intérieur duquel cette fonction sera appelée. Les deux programmes fonctionnent correctement individuellement mais lorsque j'ai inséré la définition sur la fonction dans mon programme, cela m'a donné des erreurs pour les variables qui se trouvaient dans l'un des fichiers d'en-tête de openssl (c'est-à-dire des.h). J'ai fait usage de quelques variables de type DES_cblock:
typedef unsigned char DES_cblock[8];
Il y a une autre structure avec la définition suivante:
typedef struct DES_ks
{
union
{
DES_cblock cblock;
DES_LONG deslong[2];
}ks[16];
} DES_key_schedule;
J'ai fait usage de cette structure dans mon programme comme celui-ci
DES_key_schedule keysched1,keysched2,keysched3;
Mais il ne reconnaît pas ces variables. Et puisqu'il n'y avait pas une telle erreur quand j'exécutais mon programme autonome, cela signifie que je ne suis pas capable de lier correctement les fichiers de la bibliothèque dans le programme principal. Comment puis-je faire ce travail. Ce sont les erreurs que je reçois:
Syntax error at line 1399, column 16,file/export/home/jayesho/src/custom/FRB/tgl_frbsenddata.ec:
Error at line 1399, column 16 in file /export/home/jayesho/src/custom/FRB/tgl_fr
bsenddata.ec
DES_cblock hex_key1,hex_key2,hex_key3,hex_ivec,iv;
...............1
PCC-S-02201, Encountered the symbol "hex_key1" when expecting one of the followi
ng:
; , = : ([ * ? | & < > + -/% .^*= /= %= += -= <<= >>=
&&= ||= ^= | & == != <= >= << >> ++ -- ->
The symbol ";" was substituted for "hex_key1" to continue.
Syntax error at line 1402, column 22, file /export/home/jayesho/src/custom/FRB/tgl_frbsenddata.ec:
Error at line 1402, column 22 in file /export/home/jayesho/src/custom/FRB/tgl_fr
bsenddata.ec
DES_key_schedule keysched1,keysched2,keysched3;
.....................1
PCC-S-02201, Encountered the symbol "keysched1" when expecting one of the follow
ing:
; , = : ([ * ? | & < > + -/% .^*= /= %= += -= <<= >>=
&&= ||= ^= | & == != <= >= << >> ++ -- ->
The symbol ";" was substituted for "keysched1" to continue.
Syntax error at line 1436, column 38, file /export/home/jayesho/src/custom/FRB/tgl_frbsenddata.ec:
Error at line 1436, column 38 in file /export/home/jayesho/src/custom/FRB/tgl_fr
bsenddata.ec
if (DES_set_key_checked((C_Block *)hex_key1, &keysched1))
Maintenant, j'ai juste besoin de lier les fichiers de bibliothèque correctement dans mon programme pour faire courir tout le programme. Le fichier d'en-tête mentionné précédemment est des.h qui fait partie de openssl. J'ai essayé d'inclure la bibliothèque crypto aussi par -lcrypto Auparavant, ce desh n'était pas inclus correctement, mais maintenant j'ai inclus le des.h avec succès sans erreur. Quelqu'un a également suggéré que simplement inclure le fichier d'en-tête ne suffit pas et son fichier d'implémentation doit également être linked, donc je veux maintenant savoir comment inclure et lier quoi? Comment trouver le nom du lien qui doit être lié.
Si cela fonctionne lorsque vous compilez manuellement et non lorsque vous utilisez make, il y a quelque chose d'étrange dans votre Makefile. Qu'y a-t-il dans votre Makefile? –