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 to
dlopen' dso_dlfcn.c:(.text+0x33): undefined reference todlsym' dso_dlfcn.c:(.text+0x3d): undefined reference to
dlclose' /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In functiondlfcn_bind_func': dso_dlfcn.c:(.text+0x3b1): undefined reference to
dlsym' dso_dlfcn.c:(.text+0x490): undefined reference todlerror' /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function
dlfcn_bind_var': dso_dlfcn.c:(.text+0x511): undefined reference todlsym' dso_dlfcn.c:(.text+0x5f0): undefined reference to
dlerror' /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In functiondlfcn_load': dso_dlfcn.c:(.text+0x667): undefined reference to
dlopen' dso_dlfcn.c:(.text+0x6de): undefined reference todlclose' dso_dlfcn.c:(.text+0x715): undefined reference to
dlerror' /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In functiondlfcn_pathbyaddr': dso_dlfcn.c:(.text+0x7b1): undefined reference to
dladdr' dso_dlfcn.c:(.text+0x819): undefined reference todlerror' /usr/local/ssl/lib/libcrypto.a(dso_dlfcn.o): In function
dlfcn_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