0

私はcryptこのような機能を使おうとしています(私はCを初めて使用しますが、これは学習用です)

#include<stdio.h>
#define _XOPEN_SOURCE
#include <unistd.h>


char *crypt(const char *key, const char *salt);

int main()
{
    char* key="ilya";
    char* salt="xx";

    char* password=(char*)crypt(key, salt);

    printf("%s\n", password);

    return 0;
}

を使用してコンパイルするとmake filename 、次のエラーが発生します。

/home/bla/password.c:20: undefined reference to `crypt'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

何故ですか?

(私はそれが物事を暗号化する非常にひどい方法であることを知っています、これは単に学習目的のためです)

4

1 に答える 1

1

gcc file.c -o file -lcryptLinuxを実行している場合は、libcryptライブラリをリンクしてみてください。

(char*)キャストを呼び出しから削除できます。キャストはすでにから提供されているため、関数の宣言もcrypt()返します。char *crypt()unistd.h

また、これを変更することをお勧めします。

char *key
char *salt

const char *key
const char *salt

それらは読み取り専用メモリを指しているため、それらが指すSIGSEGVコンテンツを変更しようとすると(セグメンテーション違反信号)が生成されます。

于 2012-12-11T15:39:52.113 に答える