md5参考错误

我在我的mac上编译了一个正确工作的md5程序但是当我尝试在我的ubuntu发行版上编译它时出错了:

/tmp/ccKBJiV3.o: In function `str2md5': md5.c:(.text+0x33): undefined reference to `MD5_Init' md5.c:(.text+0x5b): undefined reference to `MD5_Update' md5.c:(.text+0x79): undefined reference to `MD5_Update' md5.c:(.text+0xa2): undefined reference to `MD5_Final' collect2: ld returned 1 exit status 

以下是我的主要代码:

 #include  #include  #include  #include "md5.h" #include  #include  int main(int argc, char *argv[]) { char *output = str2md5(argv[1], strlen(argv[1])); printf("%s\n", output); free(output); return 0; } 

这是我的“md5.h”文件只包含str2md5函数:

 #include  #include  #include  #if defined(__APPLE__) # define COMMON_DIGEST_FOR_OPENSSL # include  # define SHA1 CC_SHA1 #else # include  #endif char *str2md5(const char *str, int length) { int n; MD5_CTX c; unsigned char digest[16]; char *out = (char*)malloc(33); MD5_Init(&c); while (length > 0) { if (length > 512) { MD5_Update(&c, str, 512); } else { MD5_Update(&c, str, length); } length -= 512; str += 512; } MD5_Final(digest, &c); for (n = 0; n < 16; ++n) { snprintf(&(out[n*2]), 16*2, "%02x", (unsigned int)digest[n]); } return out; } 

我试图用我在互联网上找到的所有-l东西来编译它。 例如:

  gcc -Wall -lcrypto -lssl md5.c -o md5 

任何有助于实现这一目标的帮助都会令人惊叹!

OS X使用古老版本的GNU工具链,而Ubuntu(以及一般的Linux发行版)使用较新版本。 这些更新的版本要求按照符号相互依赖的顺序指定对象和库文件。 这意味着为了获得最大的可移植性, 您应该始终将库链接器标志放在命令行调用的末尾,如下所示:

 gcc -Wall md5.c -o md5 -lcrypto -lssl 

-l放在命令的末尾:

 gcc -Wall md5.c -o md5 -lcrypto -lssl 

在eclipse中这样做:

右键单击Eclipse中的项目 – > C / C ++构建设置 – >工具设置 – > GCC C链接器 – >库,然后在右侧的-l部分添加“ssl”和“crypto”。

日食

在ubuntu 16.04上我有问题,然后我在14.04编译它,它对我有用

有时,可能需要正确的符号链接:

我的初始系统文件:

 -rwxr-xr-x. 1 root root 1408384 Jun 5 2014 libcrypto.so.0.9.8e lrwxrwxrwx. 1 root root 19 Sep 22 2015 libcrypto.so.10 -> libcrypto.so.1.0.1e -rwxr-xr-x. 1 root root 1965856 Jul 23 2015 libcrypto.so.1.0.1e lrwxrwxrwx. 1 root root 19 Sep 22 2015 libcrypto.so.6 -> libcrypto.so.0.9.8e lrwxrwxrwx. 1 root root 25 Sep 25 2015 libcrypt.so -> ../../lib64/libcrypt.so.1 

只有在我添加了符号链接之后

sudo ln -s libcrypto.so.1.0.1e libcrypto.so

我的链接开始起作用了