I have created a shared object named as a.so and it worked perfectly with an executable developed in c/c++ (linux). This shared object provides some functions for integration in external software. Below are some characteristics of this shared object:
It appears that you have linked your code only with
You must also explicitly link with
EVP_cleanup() is defined in
objdump is a useful tool for figuring out what you need to link with, when documentation is lacking.
$ objdump -T /usr/lib64/libcrypto.so | grep EVP_cleanup 000000000012f5e0 g DF .text 0000000000000054 libcrypto.so.10 EVP_cleanup