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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "md5.h"
#include <openssl/md5.h>
#include <openssl/hmac.h>
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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#if defined(__APPLE__)
# define COMMON_DIGEST_FOR_OPENSSL
# include <CommonCrypto/CommonDigest.h>
# define SHA1 CC_SHA1
#else
# include <openssl/md5.h>
#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
これを機能させるための助けは素晴らしいでしょう!