#ubuntu #openssl #libcrypto
#ubuntu #openssl #libcrypto
Вопрос:
Я выполняю перекрестную компиляцию ARM на x86, и у меня есть цепочка инструментов, как показано ниже :
SET(CMAKE_SYSTEM_NAME Linux)
include(CMakeForceCompiler)
SET(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g )`
Я написал собственный скрипт для перекрестной компиляции моего кода для генерации двоичных файлов. Внутри моего скрипта я установил следующие инструменты:
apt-get install -y debootstrap build-essential cmake libssl-dev:armhf gcc-arm-linux* g -arm-linux* openssl:armhf libssl-dev:armhf curl:armhf libcurl4-gnutls-dev:armhf libtirpc-dev:armhf
У меня установлен openssl 1.1.1f на моей ОС ubuntu 18.04, при запуске моего скрипта я получаю сообщение об ошибке ниже:
libcrypto.so: undefined reference to `fcntl@GLIBC_2.28'
ПРИМЕЧАНИЕ: это libcrypto.so библиотека создана мной на ubuntu 20.04, и теперь кросс-компиляция выполняется на ubuntu 18.04
Ответ №1:
Ваш libcrypto.so ссылается на функцию из glibc (базовая библиотека для всего) версии 2.28, которая присутствовала во время вашей сборки 20.04, но теперь вы создаете 18.04 с другой, несовместимой версией glibc.
Вероятно, путь наименьшего сопротивления — это перестроить openssl с помощью вашего текущего набора инструментов.
Комментарии:
1. Можете ли вы помочь мне установить этот glibc?
2. Одновременно в системе может быть только одна версия glibc. Конечно, его изменение исправит libcrypto. И это нарушило бы все остальное. Если вы хотите получить серьезный опыт обучения, конечно, сделайте это. Я не думаю, что сделал бы это сам.
3. В моем скрипте перекрестной компиляции я уже устанавливаю следующие инструменты:
apt-get install -y debootstrap build-essential cmake libssl-dev:armhf gcc-arm-linux* g -arm-linux* openssl:armhf libssl-dev:armhf curl:armhf libcurl4-gnutls-dev:armhf libtirpc-dev:armhf
. Но я все еще получаю ошибку, определенную в приведенном выше вопросе