LINUX.ORG.RU

Сборка либы, которая использует openssl

 , , ,


0

2

Добрый день, есть либа, в которой используется openssl. На убунте собирается нормально, но дома никак не могу собрать (стоит manjaro).

В самой либе точно код нормальный, видимо у меня что-то с openssl. Подскажите плз как узнать/продиагностировать что не так?

По логам не могу распарсить что не так (ну точнее могу, но не понимаю почему возникает такая ошибка, т.к. буквально несколько часов назад прекрасно всё собирал на другой машине).

Обновление ../source/ATE/Signalling/SIP/ProductInfo_R.cpp для сборки ATE/Release/libSIP4_2.a
g++ -c SIP_TLS_Connection.cpp
In file included from /usr/ATE/3_0/include/ATE/Debug/Trace.h:16:0,
                 from /usr/ATE/3_0/include/ATE/Debug/SubsysTrace.h:4,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/include/ATE/Signalling/SIP/SIP_TCP_Connection.h:6,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/include/ATE/Signalling/SIP/SIP_TLS_Connection.h:6,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:11:
/home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp: In destructor ‘virtual Tm_SIP_TLS_Connection::~Tm_SIP_TLS_Connection()’:
/home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:54:23: error: invalid use of incomplete type ‘SSL {aka struct ssl_st}’
   TASSERT( 1 == m_pSSL->references );
                       ^
/usr/ATE/3_0/include/ATE/Debug/TraceMacro.h:97:6: note: in definition of macro ‘TASSERT’
  if (condition) ; else \
      ^~~~~~~~~
In file included from /usr/include/openssl/crypto.h:31:0,
                 from /usr/include/openssl/comp.h:16,
                 from /usr/include/openssl/ssl.h:47,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/include/ATE/Signalling/SIP/SIP_TLS_Connection.h:4,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:11:
/usr/include/openssl/ossl_typ.h:144:16: note: forward declaration of ‘SSL {aka struct ssl_st}’
 typedef struct ssl_st SSL;
                ^~~~~~
In file included from /usr/ATE/3_0/include/ATE/Debug/Trace.h:16:0,
                 from /usr/ATE/3_0/include/ATE/Debug/SubsysTrace.h:4,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/include/ATE/Signalling/SIP/SIP_TCP_Connection.h:6,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/include/ATE/Signalling/SIP/SIP_TLS_Connection.h:6,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:11:
/home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:54:25: error: invalid use of incomplete type ‘SSL {aka struct ssl_st}’
   TASSERT( 1 == m_pSSL->references );
                         ^
/usr/ATE/3_0/include/ATE/Debug/TraceMacro.h:97:6: note: in definition of macro ‘TASSERT’
  if (condition) ; else \
      ^~~~~~~~~
In file included from /usr/include/openssl/crypto.h:31:0,
                 from /usr/include/openssl/comp.h:16,
                 from /usr/include/openssl/ssl.h:47,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/include/ATE/Signalling/SIP/SIP_TLS_Connection.h:4,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:11:
/usr/include/openssl/ossl_typ.h:144:16: note: forward declaration of ‘SSL {aka struct ssl_st}’
 typedef struct ssl_st SSL;
                ^~~~~~
In file included from /usr/ATE/3_0/include/ATE/Debug/Trace.h:16:0,
                 from /usr/ATE/3_0/include/ATE/Debug/SubsysTrace.h:4,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/include/ATE/Signalling/SIP/SIP_TCP_Connection.h:6,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/include/ATE/Signalling/SIP/SIP_TLS_Connection.h:6,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:11:
/home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:59:27: error: invalid use of incomplete type ‘SSL_CTX {aka struct ssl_ctx_st}’
   TASSERT( 1 == m_pSSL_CTX->references );
                           ^
/usr/ATE/3_0/include/ATE/Debug/TraceMacro.h:97:6: note: in definition of macro ‘TASSERT’
  if (condition) ; else \
      ^~~~~~~~~
In file included from /usr/include/openssl/crypto.h:31:0,
                 from /usr/include/openssl/comp.h:16,
                 from /usr/include/openssl/ssl.h:47,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/include/ATE/Signalling/SIP/SIP_TLS_Connection.h:4,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:11:
/usr/include/openssl/ossl_typ.h:145:16: note: forward declaration of ‘SSL_CTX {aka struct ssl_ctx_st}’
 typedef struct ssl_ctx_st SSL_CTX;
                ^~~~~~~~~~
In file included from /usr/ATE/3_0/include/ATE/Debug/Trace.h:16:0,
                 from /usr/ATE/3_0/include/ATE/Debug/SubsysTrace.h:4,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/include/ATE/Signalling/SIP/SIP_TCP_Connection.h:6,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/include/ATE/Signalling/SIP/SIP_TLS_Connection.h:6,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:11:
/home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:59:29: error: invalid use of incomplete type ‘SSL_CTX {aka struct ssl_ctx_st}’
   TASSERT( 1 == m_pSSL_CTX->references );
                             ^
/usr/ATE/3_0/include/ATE/Debug/TraceMacro.h:97:6: note: in definition of macro ‘TASSERT’
  if (condition) ; else \
      ^~~~~~~~~
In file included from /usr/include/openssl/crypto.h:31:0,
                 from /usr/include/openssl/comp.h:16,
                 from /usr/include/openssl/ssl.h:47,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/include/ATE/Signalling/SIP/SIP_TLS_Connection.h:4,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:11:
/usr/include/openssl/ossl_typ.h:145:16: note: forward declaration of ‘SSL_CTX {aka struct ssl_ctx_st}’
 typedef struct ssl_ctx_st SSL_CTX;
                ^~~~~~~~~~
/home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:67:20: warning: ‘void ERR_remove_state(long unsigned int)’ is deprecated [-Wdeprecated-declarations]
  ERR_remove_state(0);
                    ^
In file included from /usr/include/openssl/ct.h:13:0,
                 from /usr/include/openssl/ssl.h:61,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/include/ATE/Signalling/SIP/SIP_TLS_Connection.h:4,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:11:
/usr/include/openssl/err.h:248:1: note: declared here
 DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid))
 ^
/home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp: In member function ‘bool Tm_SIP_TLS_Connection::EstablishTLS()’:
/home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:296:47: warning: ‘const SSL_METHOD* TLSv1_client_method()’ is deprecated [-Wdeprecated-declarations]
  m_pSSL_CTX = SSL_CTX_new(TLSv1_client_method());
                                               ^
In file included from /usr/include/openssl/ct.h:13:0,
                 from /usr/include/openssl/ssl.h:61,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/include/ATE/Signalling/SIP/SIP_TLS_Connection.h:4,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:11:
/usr/include/openssl/ssl.h:1626:1: note: declared here
 DEPRECATEDIN_1_1_0(__owur const SSL_METHOD *TLSv1_client_method(void)) /* TLSv1.0 */
 ^
/home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp: In static member function ‘static void Tm_SIP_TLS_Connection::ReleaseSSL()’:
/home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:432:20: warning: ‘void ERR_remove_state(long unsigned int)’ is deprecated [-Wdeprecated-declarations]
  ERR_remove_state(0);
                    ^
In file included from /usr/include/openssl/ct.h:13:0,
                 from /usr/include/openssl/ssl.h:61,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/include/ATE/Signalling/SIP/SIP_TLS_Connection.h:4,
                 from /home/zef/build/2018-03-14/ATE/Signalling/SIP/4_2/source/ATE/Signalling/SIP/SIP_TLS_Connection.cpp:11:
/usr/include/openssl/err.h:248:1: note: declared here
 DEPRECATEDIN_1_0_0(void ERR_remove_state(unsigned long pid))
 ^
make: *** [/usr/ATE/maketempl/linux/gcc4.7/protei.mak:93: ATE/Release/ATE/Signalling/SIP/SIP_TLS_Connection.o] Error 1

Версии проверь. Возможно твоей либе нужен более свежий опенссл (или наоборот более древний)

Stil ★★★★★
()
Ответ на: комментарий от Stil

На убунте:

⋊> ~ openssl version                                                                                                             OpenSSL 1.0.2g  1 Mar 2016
⋊> ~ whereis openssl                                                                                                             openssl: /usr/bin/openssl /usr/include/openssl /usr/share/man/man1/openssl.1ssl.gz

На manjaro:

[zef@pc]$ openssl version
OpenSSL 1.1.0g  2 Nov 2017
[zef@pc]$ whereis openssl
openssl: /usr/bin/openssl /usr/include/openssl /usr/share/man/man1/openssl.1ssl.gz

Как ещё версии либ сравнивать я хз :)

penetrator3000
() автор топика
Ответ на: комментарий от annulen

а код рассчитан на 1.0.x

Да, скорее всего, оно и есть. Наблюдал аналогичные ошибки при сборке старого кода с 1.1.0. Там много всего попрятали, сделали доступ через функции, а не через прямой доступ к полям структур.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Ага, похоже так и есть.

В общем если верить yaourt у меня версия 1.0 есть:

[zef@pc]$ yaourt openssl-1.0
1 core/openssl-1.0 1.0.2.n-1 [installed]
    The Open Source toolkit for Secure Sockets Layer and Transport Layer Security

Попытаюсь допилить скрипт, чтобы собирался с нужной версией openssl.

penetrator3000
() автор топика
Ответ на: комментарий от annulen

Ага, вот гуглю как это сделать адекватно. Тут ещё сложность заключается в том что собирается всё это дело через скриптовую обвязку, где все либы (включая эту) выкачиваются из репозитория, где я ничего не могу править.

Т.е. надо именно для моего компа придумать какой-то хак, чтобы бралась нужная версия openssl, при этом желательно не поломать автоматизацию.

penetrator3000
() автор топика
Ответ на: комментарий от annulen

Из идей просто выпилить 1.1 и поставить 1.0, не самый красивый подход конечно.

penetrator3000
() автор топика

Когда при сборке на Arch'е требовался openssl версии 1.0, я обычно просто делал симлинк include и библиотек:

cd /usr/lib
ln -sf libssl.so.1.0.0 libssl.so
ln -sf libcrypto.so.1.0.0 libcrypto.so
cd /usr/include
mv openssl openssl.old
ln -s openssl-1.0/openssl openssl
После сборки возвращал все обратно.

Kron4ek ★★★★★
()
Ответ на: комментарий от Kron4ek

Как я понимаю более «правильного» способа нет?

«Вручную» либу собрал нормально, теперь надо написать 2 скрипта которые будут наводить симлинки

penetrator3000
() автор топика
Ответ на: комментарий от penetrator3000

Более правильный способ - передача параметров сборочному тулкиту. Например, cmake'у можно указать что-то вроде -DOPENSSL_INCLUDE_DIR, -DOPENSSL_CRYPTO_LIBRARY и т.д.

Kron4ek ★★★★★
()
Ответ на: комментарий от Kron4ek

Это да. Но проблема заключается в том, что я собираю с помощью makefile'а, который генерируется специальным скриптом. Эти 2 вещи (как и либу) я менять не могу.

Там физически нет параметров (из серии путь до openssl и т.п.), так что нечего передавать, просто по умолчанию (в коде) написано что-то из серии:

#include <openssl/ssl.h>

penetrator3000
() автор топика

спалил место своей работы

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.