Attempt 1, Vanilla Link to Library
I'm trying to use a patched version of OpenSSL (so DTLS is easier to use). OpenSSL is in
/usr/local/openssl-1.0.1c
The ./include/openssl subfolder has a ton of header files (as I assume it should):
lrwxrwxrwx 1 root root 22 Dec 25 05:49 aes.h -> ../../crypto/aes/aes.h
lrwxrwxrwx 1 root root 24 Dec 25 05:49 asn1.h -> ../../crypto/asn1/asn1.h
lrwxrwxrwx 1 root root 28 Dec 25 05:49 asn1_mac.h -> ../../crypto/asn1/asn1_mac.h
...
GCC links to the include folder and gives me an error- it cannot find SSL. I'm using more or less the same thing other people are. This works, on OSX (10.6), but not on Ubuntu:
~$ gcc -L/usr/local/openssl-1.0.1c/include -lssl -lcrypto -o server server.c
server.c:20:25: fatal error: openssl/ssl.h: No such file or directory
compilation terminated.
Attempt 2, Symbolic Link to Library in /usr/include
So, then I try creating a symbolic link to OpenSSL in my /usr/include:
sudo ln -s /usr/local/openssl-1.0.1c/include/openssl /usr/include/openssl
and re-attempting compilation:
~$ gcc -L/usr/local/openssl-1.0.1c/include -lssl -lcrypto -o server server.c
/usr/bin/ld: cannot find -lssl
/usr/bin/ld: cannot find -lcrypto
collect2: ld returned 1 exit status
make: *** [server] Error 1
Why does the first method (ie no symbolic link) not work? Permissions? Why does the second method not work? Why does this work on OSX???
The problem with the header file not being found seems to be you mixing up your options. -L
adds a path to the linker library search paths, while -I
adds a directory to the preprocessor header file search path. Change the -L
to -I
to solve that problem:
$ gcc -I/usr/local/openssl-1.0.1c/include server.c -o server.o
Now the linker problem is because you erroneously use the -L
option to tell the linker to look for libraries in the include path. You need to change that path to the directory where the libraries are, usually a lib
subdirectory. Also, the linker wants libraries in reverse order of their dependencies, so place the libraries you want to link with last on the command line:
$ gcc -I/usr/local/openssl-1.0.1c/include server.c -o server.o \
-L/usr/local/openssl-1.0.1c/lib -lssl -lcrypto
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