与OpenSSL链接错误

时间:2014-02-07 09:40:47

标签: c linux gcc

我已经安装了OpenSSL。我只想用OpenSSL运行一个程序。

这是我的程序,取自here

#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/bholanath/Sources/openssl-1.0.1e/include/ op.c -lcrypt 

/tmp/ccvHr9Jr.o: In function `main':
op.c:(.text+0x9c): undefined reference to `AES_set_encrypt_key'
op.c:(.text+0xbc): undefined reference to `AES_encrypt'
op.c:(.text+0xd7): undefined reference to `AES_set_decrypt_key'
op.c:(.text+0xf7): undefined reference to `AES_decrypt'
collect2: error: ld returned 1 exit status

$ gcc op.c -lcrypt 

/tmp/ccDEZMog.o: In function `main':
op.c:(.text+0x9c): undefined reference to `AES_set_encrypt_key'
op.c:(.text+0xbc): undefined reference to `AES_encrypt'
op.c:(.text+0xd7): undefined reference to `AES_set_decrypt_key'
op.c:(.text+0xf7): undefined reference to `AES_decrypt'
collect2: error: ld returned 1 exit status

任何帮助删除编译错误并运行我的程序都会很棒。 我在Fedora linux下使用GCC。

3 个答案:

答案 0 :(得分:1)

您的错误是,您只是简单地与-lcrypt而不是-lcrypto进行关联。

libcrypt是glibc的一小部分,它提供标准的Unix函数crypt(3)等,并且根本不与OpenSSL相关。

答案 1 :(得分:1)

OpenSSL库名称为libcryptolibssl。尝试链接它们。 libcrypt是glibc的一部分。

另外,your code is invalid

答案 2 :(得分:0)

您的信息是链接器错误,因为它正在搜索目标文件但无法找到它们。在编译时你传递了错误的库名。您应该通过-lcrypto而不是-lcrypt