libcrypto.so : неопределенная ссылка на `fcntl@GLIBC_2.28 ‘

#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 . Но я все еще получаю ошибку, определенную в приведенном выше вопросе