Функция 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>

Другие вопросы по тегам