Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/11/2014, à 20: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, à 21: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, à 20: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, à 21:53

WSH

Re : [Résolu] Lier une librairie en C : undefined reference to `encrypt`

OMG ça fonctionne yikes
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