Dar*_*zer 12 c++ installation ubuntu ssl
您可以将此问题视为如何在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
Run Code Online (Sandbox Code Playgroud)
所以在运行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)
...
Run Code Online (Sandbox Code Playgroud)
如何安装OpenSSL 1.0.0和1.0.0开发包?
更新:我在阅读SB的答案后(但在尝试之前)写了这个更新,因为很明显我需要解释下载和安装OpenSSL 1.0.0的明显解决方案不起作用:
成功执行以下操作后(在INSTALL文件中推荐):
$ ./config
$ make
$ make test
$ make install
Run Code Online (Sandbox Code Playgroud)
......我仍然得到:
OpenSSL 0.9.8k 25 Mar 2009
Run Code Online (Sandbox Code Playgroud)
...和:
$ 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.
Run Code Online (Sandbox Code Playgroud)
...并且(只是为了确保)在重建我的代码之后,ldd仍然返回相同的东西.
更新#2:我在我的makefile中添加了"-I/usr/local/ssl/include"和"-L/usr/local/ssl/lib"选项(由SB建议),但我现在得到一堆undefine引用编译错误,例如:
/home/dspitzer/foo/foo.cpp:86: undefined reference to `BIO_f_base64'
/home/dspitzer/foo/foo.cpp:86: undefined reference to `BIO_new'
Run Code Online (Sandbox Code Playgroud)
/ usr/local/ssl/include /只包含一个openssl目录(包含许多.h文件),所以我也试过"-I/usr/local/ssl/include/openssl",但是得到了同样的错误.
更新#3:我尝试更改OpenSSL包含(例如):
#include <openssl/bio.h>
Run Code Online (Sandbox Code Playgroud)
...至:
#include "openssl/bio.h"
Run Code Online (Sandbox Code Playgroud)
...在.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
Run Code Online (Sandbox Code Playgroud)
我添加了-lcrypto,错误消失了.
NG.*_*NG. 18
从这里获取1.0.0a源代码.
# tar -xf openssl-1.0.0a.tar.gz
# cd openssl-1.0.0a
# ./config
# sudo make install
Run Code Online (Sandbox Code Playgroud)
这默认情况下将它放在/ usr/local/ssl中
构建时,需要告诉gcc在/ usr/local/ssl/include中查找头文件,并与/ usr/local/ssl/lib中的libs链接.您可以通过执行以下操作来指定:
gcc test.c -o test -I/usr/local/ssl/include -L/usr/local/ssl/lib -lssl -lcrypto
Run Code Online (Sandbox Code Playgroud)
编辑不要覆盖任何系统库.最好将新库保留在/ usr/local中.覆盖Ubuntu默认值可能会危害您的健康并破坏您的系统.
另外,我在Ubuntu 10.04 VM中试过这个路径时错了.固定.
注意,没有必要更改LD_LIBRARY_PATH,因为默认链接的openssl库是静态库(至少在默认情况下 - 可能有一种方法可以在./config步骤中将它们配置为动态库)
您可能需要链接libcrypto,因为您正在使用在libcrypto包中构建和定义的一些调用.Openssl 1.0.0实际上构建了两个库,libcrypto和libssl.
编辑2添加-lcrypto到gcc行.
| 归档时间: |
|
| 查看次数: |
50218 次 |
| 最近记录: |