【发布时间】:2011-03-10 08:21:29
【问题描述】:
您可以将此视为How do I install the OpenSSL C++ library on Ubuntu? 的后续问题
我正在尝试在需要 OpenSSL 1.0.0 的 Ubuntu 10.04 LTS 上构建一些代码。
Ubuntu 10.04 LTS 附带 OpenSSL 0.9.8k:
$ openssl version
OpenSSL 0.9.8k 25 Mar 2009
所以在运行sudo apt-get install libssl-dev 并构建之后,运行 ldd 确认我已在 0.9.8 中链接:
$ ldd foo
...
libssl.so.0.9.8 => /lib/i686/cmov/libssl.so.0.9.8 (0x00110000)
...
libcrypto.so.0.9.8 => /lib/i686/cmov/libcrypto.so.0.9.8 (0x002b0000)
...
如何安装 OpenSSL 1.0.0 和 1.0.0 开发包?
更新:我在阅读SB 的回答(但在尝试之前)之后写了这个更新,因为很明显我需要解释下载和安装 OpenSSL 1.0 的明显解决方案.0 不起作用:
成功执行以下操作后(建议在安装文件中):
$ ./config
$ make
$ make test
$ make install
...我还是明白了:
OpenSSL 0.9.8k 25 Mar 2009
...和:
$ sudo apt-get install libssl-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
libssl-dev is already the newest version.
The following packages were automatically installed and are no longer required:
linux-headers-2.6.32-21 linux-headers-2.6.32-21-generic
Use 'apt-get autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
...并且(只是为了确保)在重建我的代码后,ldd 仍然返回相同的内容。
更新 #2:我添加了“-I/usr/local/ssl/include”和“-L/usr/local/ssl/lib”选项(由SB 建议)到我的makefile,但我现在收到一堆未定义的参考编译错误,例如:
/home/dspitzer/foo/foo.cpp:86: undefined reference to `BIO_f_base64'
/home/dspitzer/foo/foo.cpp:86: undefined reference to `BIO_new'
/usr/local/ssl/include/ 仅包含一个 openssl 目录(其中包含许多 .h 文件),所以我也尝试了“-I/usr/local/ssl/include/openssl”但得到了相同的错误。
更新 #3:我尝试更改 OpenSSL 包含的内容(例如):
#include <openssl/bio.h>
...到:
#include "openssl/bio.h"
...在 .cpp 源文件中,但仍然得到相同的未定义引用错误。
更新 #4:我现在意识到那些未定义的引用错误是链接器错误。如果我从我的 Makefile 中删除“-L/usr/local/ssl/lib”,我不会收到错误(但它链接到 OpenSSL 0.9.8)。 /usr/local/ssl/lib/的内容是:
$ ls /usr/local/ssl/lib/
engines libcrypto.a libssl.a pkgconfig
我添加了-lcrypto,错误消失了。
【问题讨论】:
-
++ 更新 #4。谢谢。
标签: c++ ssl ubuntu installation