I've starto today to explore openSSL api for RSA. That's the simple code:
#include<stdio.h>
#include<openssl/rsa.h>
#include<openssl/engine.h>
int main() {
    RSA *rsa;
    rsa = RSA_new_();
    RSA_free(rsa);
    return 0;
}
and i'm compiling with
gcc -I /usr/local/ssl/include -o etc etc
but gcc return error of undefining reference to RSA_new and RSA_free. I've check the rsa.h header, and there's no reference to this two function. what's wrong? I've follow the reference guide on openssl website...
EDIT: gcc output:
gcc -I /usr/local/ssl/include/ -o rsa rsa.c -L/usr/local/ssl/lib -lcrypto /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function
dlfcn_globallookup': dso_dlfcn.c:(.text+0x1d): undefined reference todlopen' dso_dlfcn.c:(.text+0x33): undefined reference todlsym' dso_dlfcn.c:(.text+0x3d): undefined reference todlclose' /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In functiondlfcn_bind_func': dso_dlfcn.c:(.text+0x3b1): undefined reference todlsym' dso_dlfcn.c:(.text+0x490): undefined reference todlerror' /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In functiondlfcn_bind_var': dso_dlfcn.c:(.text+0x511): undefined reference todlsym' dso_dlfcn.c:(.text+0x5f0): undefined reference todlerror' /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In functiondlfcn_load': dso_dlfcn.c:(.text+0x667): undefined reference todlopen' dso_dlfcn.c:(.text+0x6de): undefined reference todlclose' dso_dlfcn.c:(.text+0x715): undefined reference todlerror' /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In functiondlfcn_pathbyaddr': dso_dlfcn.c:(.text+0x7b1): undefined reference todladdr' dso_dlfcn.c:(.text+0x819): undefined reference todlerror' /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In functiondlfcn_unload': dso_dlfcn.c:(.text+0x87a): undefined reference to `dlclose' collect2: ld returned 1 exit status
The propblem is that you are linking with libssl and you are using RSA crypto which is part of libcrypto, another error : there is no function called : RSA_new_:
toc@UnixServer:/usr/include/openssl$ grep RSA_new *
rsa.h:RSA * RSA_new(void);
rsa.h:RSA * RSA_new_method(ENGINE *engine);
So correct your code:
rsa = RSA_new();
And compile like that:
gcc -I/usr/include/openssl/ -Wall my_rsa.c -o my_rsa  -lcrypto
EDIT : for the last error(dl functions):
gcc -I/usr/include/openssl/ -Wall my_rsa.c -o my_rsa  -lcrypto -ldl
                        You need to link with the library as well:
gcc -I/usr/local/ssl/include -o etc etc.c -L/usr/local/lib -lssl
The -L option tells GCC where to look for library file, and -l (small L) tells the linker that it should link with the library.
Replace the library folder and library name with what you got.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With