#1 Le 27/11/2014, à 19:12
- WSH
[Résolu] Lier une librairie en C : undefined reference to `encrypt`
Bonjour à tous,
Travaillant sur un mini programme afin de m'exercer au fonctionnement des sockets en C, je souhaitais ajouter un simili-chiffrement lors du transfert d'un fichier d'un PC à un autre.
J'ai voulu utiliser les fonctions encrypt et setkey afin de réaliser cela. Cependant au moment de la compilation j'obtiens ces erreurs :
/tmp/ccM94ECn.o: In function `main':
client.c:(.text+0x1ed): undefined reference to `setkey'
client.c:(.text+0x21f): undefined reference to `encrypt'
collect2: error: ld returned 1 exit status
Compilation failed.
Pourtant j'ai bien ajouté le define _XOPEN_SOURCE et j'ai compilé avec la commande
gcc -Wall -lcrypt -o client client.c
afin de lier la librairie libcrypt, comme indiqué dans la manpage.
Auriez-vous une idée de l'origine du problème ?
Voici un extrait du code :
#define _XOPEN_SOURCE
#include <features.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <errno.h>
#include <unistd.h>
#include <limits.h>
#define PORT 6666
#define BUFFER_SIZE 64
#define CLEF_CHIFFREMENT "11010101110001010100111010110111101001010110101000011010111001101"
int main (int argc, char **argv)
{
struct sockaddr_in serveur;
struct hostent *serveurAddr;
int connexion;
char nomFichier[PATH_MAX];
char ipServeur[16];
char buffer[BUFFER_SIZE];
int fichier;
size_t tailleLue;
/* Je passe le code pour gérer la socket et le fichier à envoyer */
setkey(CLEF_CHIFFREMENT);
printf("Envoi du fichier en cours... ");
// On garde les 4 premiers octets pour enregistrer le nombre d'octets lus
while ((tailleLue = read(fichier, buffer + 4, BUFFER_SIZE - 4)) > 0)
{
// On enregistre le nombre d'octets lus dans le paquet
*buffer = tailleLue;
// On chiffre le paquet
encrypt(buffer, 0);
// On envoie le tout au serveur
write(connexion, buffer, BUFFER_SIZE);
}
/* encore du code... */
return 0;
Merci d'avance !
Dernière modification par WSH (Le 27/11/2014, à 20:53)
Actuellement sous Ubuntu 14.10 64-bits et Lubuntu 14.10 32-bits
Intel Core i5 760 @ 2.80 GHz / CG Sapphire Radeon HD5770 1Go DDR5 / 4 Go DDR3 PC12800 / MB Asus P7P55D
Hors ligne
#2 Le 27/11/2014, à 19:55
- pingouinux
Re : [Résolu] Lier une librairie en C : undefined reference to `encrypt`
Bonsoir,
Essaye comme ceci :
gcc -Wall -o client client.c -lcrypt
Hors ligne
#3 Le 27/11/2014, à 20:53
- WSH
Re : [Résolu] Lier une librairie en C : undefined reference to `encrypt`
OMG ça fonctionne
Je pensais avoir tout essayé mais alors ça... C'est bon à savoir, merci beaucoup !!
Bonne soirée !
Actuellement sous Ubuntu 14.10 64-bits et Lubuntu 14.10 32-bits
Intel Core i5 760 @ 2.80 GHz / CG Sapphire Radeon HD5770 1Go DDR5 / 4 Go DDR3 PC12800 / MB Asus P7P55D
Hors ligne