Take the 2-minute tour ×


#include <openssl/ssl.h>
#include <openssl/rsa.h>
#include <openssl/x509.h>
#include <openssl/evp.h>

In the same folder where i have the .c file I have a /openssl with all those files (and more), also in synaptic package manager I see OpenSSL installed, I am trying to compile with this:

gcc -o Opentest Opentest.c -lcrypto

but I always get the errors:

error: openssl/ssl.h: No such file or directory
error: openssl/rsa.h: No such file or directory
error: openssl/x509.h: No such file or directory
error: openssl/evp.h: No such file or directory

The file I want to compile is only a .c file, doesnt have Makefile or ./configure.

I already tried:

env CFLAGS=-I/path/to/openssl/

and tried to compile again but i get the same errors.

What should I do in order to compile with openssl includes?

share|improve this question
add comment

5 Answers

up vote 35 down vote accepted

Your include paths indicate that you should be compiling against the system's OpenSSL installation. You shouldn't have the .h files in your package directory - it should be picking them up from /usr/include/openssl.

The plain OpenSSL package (libssl) doesn't include the .h files - you need to install the development package as well (libssl-dev).

share|improve this answer
Thank you, that was easy. –  jahmax Jul 30 '10 at 14:55
@jahmax: No worries. You will find that most library packages in Debian-based distros have a *-dev package that you will need to compile against the library (and often a *-dbg package containing debugging symbols for the library). –  caf Jul 30 '10 at 23:40
You made my day ;-) –  nico_ekito Feb 7 '12 at 14:03
Right on. libssl-dev did the trick for building osslsigncode-1.5.2 on Ubuntu. –  karmakaze Jun 20 '13 at 2:15
add comment

Use the -I flag to gcc properly.

gcc -I/path/to/openssl/ -o Opentest -lcrypto Opentest.c

The -I should point to the directory containing the openssl folder.

share|improve this answer
gcc -I/home/username/Programming/openssl/ -o Opentest -lcrypto Opentest.c it gives me the same errors :( –  jahmax Jul 30 '10 at 4:29
To elaborate on your answer if the openssl folder is /path/to/openssl/ then the option needs to be -I/path/to/ @jahmax. so you want /home/username/Programming/ –  Earlz Jul 30 '10 at 4:36
@Earlz : Thanks, I tried to say that with the last explicit line but it must have gotten missed. –  Borealid Jul 30 '10 at 4:42
Thanks, that worked, but now I get errors in the includes inside openssl/ssl.h, that include files that are inside /openssl/subfolders, how can I make gcc to find those? –  jahmax Jul 30 '10 at 4:51
@jah if you are being "bad" and your own project's include path(openssl/*) doesn't match OpenSSL's (possible *) then you could have this problem. The best solution is to change your project to use ssl.h instead of openssl/ssl.h etc. The quick fix is to set include paths for both /path/to/ and /path/to/openssl/ –  Earlz Jul 30 '10 at 4:58
add comment

From the openssl.pc file


Name: OpenSSL
Description: Secure Sockets Layer and cryptography libraries and tools
Version: 0.9.8g
Libs: -L${libdir} -lssl -lcrypto
Libs.private: -ldl -Wl,-Bsymbolic-functions -lz
Cflags: -I${includedir}

You can note the Include directory path and the Libs path from this. Now your prefix for the include files is /home/username/Programming . Hence your include file option should be -I//home/username/Programming.

(Yes i got it from the comments above)

This is just to remove logs regarding the headers. You may as well provide -L<Lib path> option for linking with the -lcrypto library.

share|improve this answer
I still get errors in all the includes used by ssl.h, why gcc cant find those? –  jahmax Jul 30 '10 at 14:49
add comment

If the OpenSSL headers are in the openssl sub-directory of the current directory, use:

gcc -I. -o Opentest Opentest.c -lcrypto

The pre-processor looks to create a name such as "./openssl/ssl.h" from the "." in the -I option and the name specified in angle brackets. If you had specified the names in double quotes (#include "openssl/ssl.h"), you might never have needed to ask the question; the compiler on Unix usually searches for headers enclosed in double quotes in the current directory automatically, but it does not do so for headers enclosed in angle brackets (#include <openssl/ssl.h>). It is implementation defined behaviour.

You don't say where the OpenSSL libraries are - you might need to add an appropriate option and argument to specify that, such as '-L /opt/openssl/lib'.

share|improve this answer
i tried -L/usr/lib but I still get errors in all the includes from ssl.h, why gcc cant find them? –  jahmax Jul 30 '10 at 14:50
add comment

my english isn't very good but i found a patch for this issue in a chinesse web page

yum install openssl yum install openssl-devel

install this and tha's it, tested in centos 5.4 and keepalived-1.2.7]

share|improve this answer
add comment

Your Answer


