I had a correctly working md5 program compiled on my mac but when I try to compile on my ubuntu distro it errors out saying:
 /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
Below is my code for main:
#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;
}
Here is my "md5.h" file just contains the str2md5 function:
#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;
} 
I have tried to compile it with all the -l things I have found on the internet. For example:
 gcc -Wall -lcrypto -lssl md5.c -o md5
Any help to get this to work would be amazing!
