Ошибка компиляции LibreSSL 3.0.2 в Solaris 10: неопределенная ссылка на символ 'SHA512Final' - PullRequest
1 голос
/ 16 января 2020

Мы пытаемся скомпилировать LibreSSSL 3.0.2 на Solaris 10. Мы используем GNU g cc 4.6.2 и имеем следующую проблему:

Making all in tests
make[1]: Entering directory `/users/login/e486530/openssh81/libressl-3.0.2/tests'
CCLD     handshake_table
/soft/gnu/lib/gcc/i386-pc-solaris2.10/4.6.2/../../../../i386-pc-solaris2.10/bin/ld: /users/login/e486530/openssh81/libressl-3.0.2/crypto/.libs/libcrypto.a(getentropy_solaris.o): undefined reference to symbol 'SHA512Final'
/soft/gnu/lib/gcc/i386-pc-solaris2.10/4.6.2/../../../../i386-pc-solaris2.10/bin/ld: note: 'SHA512Final' is defined in DSO /lib/libmd.so.1 so try adding it to the linker command line
/lib/libmd.so.1: could not read symbols: Invalid operation
collect2: ld returned 1 exit status

Ошибка " неопределенная ссылка на символ 'SHA512Final "

Сделано предложение ' SHA512Final 'определено в DSO /lib/libmd.so.1, поэтому попробуйте добавить его в командную строку компоновщика, Но сразу после того, как у нас появилась ошибка "/ lib / libmd.so.1: не удалось прочитать символы: недопустимая операция" , поэтому, очевидно, компилятор уже пытается прочитать символы из этой библиотеки без успеха.

Есть идеи для успешной компиляции LibreSSL на Solaris?


Я добавлю некоторые детали ...

Компиляция сделана на Solaris 10 для i386 с компилятором GNU g cc 4.6.2. Я не устанавливаю биты для компиляции.

GNU g cc показывает следующую информацию с опцией -v

$ gcc -v
Using built-in specs.
COLLECT_GCC=/soft/gnu/bin/gcc
COLLECT_LTO_WRAPPER=/soft/gnu/libexec/gcc/i386-pc-solaris2.10/4.6.2/lto-wrapper
Target: i386-pc-solaris2.10
Configured with: ../gcc-4.6.2/configure --prefix=/soft/gnu --with-gnu-ld --with-gnu-as --with-gmp=/soft/gnu --with-mpc=/soft/gnu --with-mpfr=/soft/gnu
Thread model: posix
gcc version 4.6.2 (GCC)

, а опция uname -a показывает:

$ uname -a
SunOS yvas0pd0 5.10 Generic_150401-30 i86pc i386 i86pc

Я только что перекомпилировал с флагами:

CC="gcc -m64"
CXX="g++ -m64"

И ошибка теперь

/soft/gnu/lib/gcc/i386-pc-solaris2.10/4.6.2/../../../../i386-pc-solaris2.10/bin/ld: /users/login/e486530/openssh81/libressl-3.0.2/crypto/.libs/libcrypto.a(getentropy_solaris.o): undefined reference to symbol 'SHA512Final'
/soft/gnu/lib/gcc/i386-pc-solaris2.10/4.6.2/../../../../i386-pc-solaris2.10/bin/ld: note: 'SHA512Final' is defined in DSO /lib/amd64/libmd.so.1 so try adding it to the linker command line
/lib/amd64/libmd.so.1: could not read symbols: Invalid operation

Таким образом, используемая библиотека - это 64-битная библиотека, но проблема остается ...: - |

Надеюсь, это поможет. На данный момент мы собираемся использовать OpenSSL 1.1.1, который успешно компилируется.

С уважением

1 Ответ

2 голосов
/ 23 января 2020

Ошибка, показанная в компиляции

'SHA512Final' is defined in DSO /lib/amd64/libmd.so.1 so try adding it to the linker command line
/lib/amd64/libmd.so.1: could not read symbols: Invalid operation

Действительно означает, что файл /lib/amd64/libmd.so.1 не используется компоновщиком. Я неправильно понял истинное значение.

Итак, добавление -lmd к переменной LDFLAGS делает компиляцию окончательной sh

Для получения полной информации, полное содержание для LDFLAGS В моей компиляции используется следующая переменная:

export LDFLAGS = "- Wl, -disable-new-dtags, -rpath = / opt / opens sh -8.1 / lib, -lmd"

...