LINUX.ORG.RU

Qt 5.15.2 cross compile with different glibc and glibcxx

 , ,


0

1

Здравствуйте. Имеется такая проблема. Нужно скомпилить Qt 5.15.2 на x86_64 под aarch64. Скопировал с малины sysroot, все компилиться, но есть проблема при запуске программы на малине.

pi@raspberrypi:~ $ ./testRasbperry 
./testRasbperry: /lib/aarch64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /opt/Qt/qtbase/lib/libQt5Core.so.5)
./testRasbperry: /lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.28' not found (required by /opt/Qt/qtbase/lib/libQt5Core.so.5)
./testRasbperry: /lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by /opt/Qt/qtbase/lib/libQt5Core.so.5)

На x86_64 использовал следующие команды сборки Qt 5.15.2

Номер один

./qtbase/configure -release -no-gui -xplatform linux-aarch64-gnu-g++ -sysroot ~/RaspberryPi3B+/sysroot -prefix /opt/Qt/qtbase -extprefix ~/RaspberryPi3B+/buildQt -hostprefix ~/RaspberryPi3B+/buildQtTools -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine -nomake tests -make libs -pkg-config -no-use-gold-linker

Номер два

./qtbase/configure -release -no-gui -xplatform linux-aarch64-gnu-g++ -sysroot ~/RaspberryPi3B+/sysroot -prefix /opt/Qt/qtbase -extprefix ~/RaspberryPi3B+/buildQt -hostprefix ~/RaspberryPi3B+/buildQtTools -I ~/RaspberryPi3B+/sysroot/usr/include -L ~/RaspberryPi3B+/sysroot/lib -L ~/RaspberryPi3B+/sysroot/usr/lib -rpath -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine -nomake tests -make libs -pkg-config -no-use-gold-linker

Результат в обоих случаях один, не тот glibc and glibcxx. Собственно в чем вопрос, как заставить компилятор использовать библиотеки из sysroot, а не системные. На хост машине стоит aarch64-linux-gnu-g++-10, поэтому изменил в файле mkspec название компилятора. Вариант скачать другой компилятор, не хочу, надо заставить имеющийся компилятор искать библиотеки для Qt в sysroot.

Заранее благодарен.

Ответ на: комментарий от imb

Я глянул и ответа на вопрос не нашел, как заставить компилятор скушать glibc не системный, а из sysroot. Может этот тулчейн и соберет мне, но я тогда не пойму как это делать ручками, а я думаю мне этот вопрос придется решать, но немного с другими библиотеками тоже.

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

я не использую Qt-5.15, но Qt-5.12.6 даёт такое, сам не пробовал

$ ./configure --help | grep sysroot
  -sysroot <dir> ....... Set <dir> as the target sysroot
  -gcc-sysroot ......... With -sysroot, pass --sysroot to the compiler [yes]

насколько я понимаю Вам необходимо указать оба файла, ну или самый «кондовый» способ - модифицировать используемый qmake.conf

imb ★★ ()
Ответ на: комментарий от kiruseni
$ cat mkspecs/devices/linux-rasp-pi3-g++/qmake.conf
include(../common/linux_device_pre.conf)

# For modern Yocto-based sysroots that have the proper include and lib
# setup in egl.pc we will pull the necessary arguments from
# there. However, to support Raspbian and older stuff that has /opt/vc
# and possibly no pkg-config, have some static values as well:

# I consider it a bug that this is required, but our EGL config.test _requires_ it
QMAKE_RPATHLINKDIR_POST += $$[QT_SYSROOT]/opt/vc/lib

VC_LIBRARY_PATH         = /opt/vc/lib
VC_INCLUDE_PATH         = =/opt/vc/include

VC_LINK_LINE            = -L=$${VC_LIBRARY_PATH}

QMAKE_LIBDIR_OPENGL_ES2 = =$${VC_LIBRARY_PATH}
QMAKE_LIBDIR_EGL        = $$QMAKE_LIBDIR_OPENGL_ES2
QMAKE_LIBDIR_OPENVG     = $$QMAKE_LIBDIR_OPENGL_ES2

QMAKE_INCDIR_EGL        = \
                        $${VC_INCLUDE_PATH} \
                        $${VC_INCLUDE_PATH}/interface/vcos/pthreads \
                        $${VC_INCLUDE_PATH}/interface/vmcs_host/linux

QMAKE_INCDIR_OPENGL_ES2 = $${QMAKE_INCDIR_EGL}

QMAKE_LIBS_OPENGL_ES2   = $${VC_LINK_LINE} -lGLESv2

# The official opt vc EGL references GLESv2 symbols: need to link it
QMAKE_LIBS_EGL          = $${VC_LINK_LINE} -lEGL -lGLESv2

QMAKE_LIBDIR_BCM_HOST   = =$$VC_LIBRARY_PATH
QMAKE_INCDIR_BCM_HOST   = $$VC_INCLUDE_PATH
QMAKE_LIBS_BCM_HOST     = -lbcm_host

QMAKE_CFLAGS            = -march=armv8-a -mtune=cortex-a53 -mfpu=crypto-neon-fp-armv8
QMAKE_CXXFLAGS          = $$QMAKE_CFLAGS

DISTRO_OPTS            += hard-float
DISTRO_OPTS            += deb-multi-arch

EGLFS_DEVICE_INTEGRATION= eglfs_brcm

include(../common/linux_arm_device_post.conf)

load(qt_config)

я бы правил здесь

а в скобочках yes не означает, что это дефолтное значение?

а ВАм сложно «подстелить соломку» ? ;) изучите как применяются параметры конфигурирования и не придётся гадать

imb ★★ ()

как заставить компилятор использовать библиотеки из sysroot, а не системные

думаю тут не компилятор надо заставлять, а систему сборки заставлять компилятору сообщать нужные параметры.

safocl ★★ ()
Последнее исправление: safocl (всего исправлений: 1)