Функция crypt и ошибка ссылки "неопределенная ссылка на crypt"
Я использовал функцию crypt в c для шифрования заданной строки. Я написал следующий код,
#include<stdio.h>
#include<unistd.h>
int main()
{
printf("%s\n",crypt("passwd",1000));
}
Но приведенный выше код выдал ошибку "неопределенная ссылка на" crypt "". В чем проблема в приведенном выше коде.
Заранее спасибо.
6 ответов
Если вы хотите использовать crypt()
функция, вам нужно связаться с библиотекой, которая ее поставляет. добавлять -lcrypt
к вашей команде компиляции.
Более старые версии glibc предоставили libcrypt
библиотека для этой цели, и объявил функцию в <unistd.h>
- чтобы скомпилировать эту поддержку, вам также может потребоваться определить _XOPEN_SOURCE
или же _GNU_SOURCE
в вашем коде, прежде чем включать <unistd.h>
,
Более новые версии glibc не поставляются libcrypt
- вместо этого предоставляется отдельный libxcrypt
, Вы по-прежнему связываетесь с -lcrypt
, но функция вместо этого объявлена в <crypt.h>
,
crypt()
использует DES, который крайне небезопасен и, вероятно, старше вас на 12 лет старше вас.
Я предлагаю вам использовать серьезный алгоритм шифрования, такой как AES. Многие библиотеки предлагают такое шифрование; OpenSSL (crypto.lib) является хорошим выбором, например.
Не отвечая на ваш актуальный вопрос, так как многие уже сделали
Ты должен #define __XOPEN_SOURCE
до тебя #include
файлы заголовков.
Вам нужно поставить следующую строку перед включением:
#define _XOPEN_SOURCE
Вам нужно включить crypt.h, если вы хотите использовать crypt()
, Ниже двух других включений добавьте:
#include <crypt.h>
crypt
функция не является стандартной, но поставляется как расширение библиотекой GNU C в Linux. Это определено в <crypt.h>