我正在尝试构建一个openssl简单程序。这是完整的代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "openssl/aes.h" int main(int argc, char* argv[]) { AES_KEY aesKey_; unsigned char userKey_[16]; unsigned char in_[16]; unsigned char out_[16]; strcpy(userKey_,"0123456789123456"); strcpy(in_,"0123456789123456"); fprintf(stdout,"Original message: %s", in_); AES_set_encrypt_key(userKey_, 128, &aesKey_); AES_encrypt(in_, out_, &aesKey_); AES_set_decrypt_key(userKey_, 128, &aesKey_); AES_decrypt(out_, in_,&aesKey_); fprintf(stdout,"Recovered Original message: %s", in_); return 0; }
我尝试使用以下命令进行编译:
gcc -I/home/aleksei/openSSL0.9.8/include -o app -L . -lssl -lcrypto tema1.c
我得到这个:
/tmp/ccT1XMid.o: In function `main': tema1.c:(.text+0x8d): undefined reference to `AES_set_encrypt_key' tema1.c:(.text+0xa7): undefined reference to `AES_encrypt' tema1.c:(.text+0xbf): undefined reference to `AES_set_decrypt_key' tema1.c:(.text+0xd9): undefined reference to `AES_decrypt' collect2: ld returned 1 exit status
我在Ubuntu 10.04下。我怎样才能使它工作?
您可能正在尝试静态链接,但是该-L选项并-lcrypto正在寻找要动态链接的文件。要静态链接到特定库,只需.a在所有源文件之后在编译器命令行上指定文件即可。
-L
-lcrypto
.a
例如,
gcc -I/home/aleksei/openSSL0.9.8/include -o app tema1.c ./libcrypto.a