Можно ли считать это последующим вопросом тому, Как я устанавливаю библиотеку C++ OpenSSL по Ubuntu?
Я пытаюсь создать некоторый код Ubuntu 10.04 LTS, который требует OpenSSL 1.0.0.
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) к моему make-файлу, но я теперь добираюсь, набор не определяют ссылочные ошибки компиляции, например:
/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
кому:
#include "openssl/bio.h"
... в .cpp исходном файле, но все еще получают те же неопределенные ссылочные ошибки.
Обновление № 4: Я теперь понимаю, что те неопределенные ссылочные ошибки являются ошибками компоновщика. Если я удаляю "-L/usr/local/ssl/lib" из своего Make-файла, я не получаю ошибки (но он связывается с OpenSSL 0.9.8). Содержание/usr/local/ssl/lib/:
$ ls /usr/local/ssl/lib/
engines libcrypto.a libssl.a pkgconfig
Я добавил-lcrypto, и ошибки ушли.
Получите исходный код 1.0.0a из здесь .
# tar -xf openssl-1.0.0a.tar.gz
# cd openssl-1.0.0a
# ./config
# sudo 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 step)
Возможно, вам потребуется линкнуть libcrypto, потому что вы используете некоторые вызовы, которые созданы и определены в пакете libcrypto. Openssl 1.0.0 фактически создает две библиотеки: libcrypto и libssl.
РЕДАКТИРОВАТЬ 2 Добавлен -lcrypto
в строку gcc.