尝试1,香草链接到图书馆
我正在尝试使用修补版本的OpenSSL(因此DTLS更易于使用)。OpenSSL在
/usr/local/openssl-1.0.1c
./include/openssl子文件夹有大量的头文件(我认为应该如此):
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链接到include文件夹,并给我一个错误-它找不到SSL。我或多或少地在使用与别人相同的东西。这在OSX(10.6)上有效,但在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.
尝试2,符号链接到/ usr / include中的库
因此,然后尝试在/ usr / include中创建指向OpenSSL的符号链接:
sudo ln -s /usr/local/openssl-1.0.1c/include/openssl /usr/include/openssl
并重新尝试编译:
~$ 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
为什么第一种方法(即没有符号链接)不起作用? 权限?为什么第二种方法不起作用?为什么在OSX上可以使用?
找不到头文件的问题似乎是您混淆了选项。-L在链接器库搜索路径中-I添加路径,而在预处理器头文件搜索路径中添加目录。更改-L要-I解决这个问题:
-L
-I
$ gcc -I/usr/local/openssl-1.0.1c/include server.c -o server.o
现在,链接器问题是因为您错误地使用该-L选项告诉链接器在包含路径中查找库。您需要将该路径更改为库所在的目录,通常是lib子目录。另外,链接器希望库以其依赖关系的相反顺序排列,因此请将要链接的库放在命令行的最后:
lib
$ gcc -I/usr/local/openssl-1.0.1c/include server.c -o server.o \ -L/usr/local/openssl-1.0.1c/lib -lssl -lcrypto