2012-12-11 49 views
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) 

這是爲什麼?

(我知道這是加密的事情非常糟糕的方式,這只是出於學習目的)

+0

(我沒有回答你的問題,但是你在你的主文件中輸入了crypt嗎?) – Joze

+0

'crypt'是在同一個.c文件中定義的嗎? – Joze

+0

如果Linux是您的預期平臺,請參閱[本文檔]的鏈接器建議(http://www.kernel.org/doc/man-pages/online/pages/man3/crypt.3.html)。 – WhozCraig

回答

1

嘗試gcc file.c -o file -lcrypt如果你正在運行Linux鏈接的libcrypt庫。

您可以調用crypt()刪除(char*)投,它已經返回char *,也因爲它已經從unistd.h提供的crypt()函數的聲明。

我也建議你改變這一點:

char *key 
char *salt 

const char *key 
const char *salt 

因爲它們都指向只讀存儲器,並會產生SIGSEGV(分段故障信號),如果你嘗試修改他們指向的內容。

+0

謝謝!有效 – ilyo

相關問題