如何在 Ubuntu 上安装和构建 OpenSSL 1.0.0?

新手上路,请多包涵

您可以将其视为 如何在 Ubuntu 上安装 OpenSSL C++ 库的后续问题?

我正在尝试在需要 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 :我在 makefile 中添加了“-I/usr/local/ssl/include”和“-L/usr/local/ssl/lib”选项(由 SB 建议),但我现在得到了一堆未定义参考编译错误,例如:

 /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,错误就消失了。

原文由 Daryl Spitzer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
1 个回答

这里 获取 1.0.0a 源代码。

 # tar -xf openssl-1.0.0a.tar.gz
# cd openssl-1.0.0a
# ./config
# sudo make install

注意:如果您在现代系统上有 手册页构建错误,请使用 make install_sw 而不是 make install

默认情况下,这会将其放在 /usr/local/ssl

构建时,您需要告诉 gcc 在 /usr/local/ssl/include 中查找头文件并与 /usr/local/ssl/lib 中的库链接。您可以通过执行以下操作来指定:

 gcc test.c -o test -I/usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto

编辑 不要覆盖任何系统库。最好将新库保存在 /usr/local 中。覆盖 Ubuntu 默认设置可能会危害您的健康并破坏您的系统。

此外,我刚刚在 Ubuntu 10.04 VM 中尝试过的路径是错误的。固定的。

请注意,无需更改 LD_LIBRARY_PATH 因为默认情况下链接的 openssl 库是静态库(至少默认情况下 - 可能有一种方法可以在 ./config 步骤中将它们配置为动态库)

您可能需要链接 libcrypto,因为您正在使用一些在 libcrypto 包中构建和定义的调用。 Openssl 1.0.0 实际上构建了两个库,libcrypto 和 libssl。

编辑 2 添加 -lcrypto 到 gcc 行。

原文由 NG. 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏