LINUX.ORG.RU

Линковка после компиляции кросс-компилером для ARM: libQt5Core.so undefined reference to

 , , ,


0

2

Собрал Qt для ARM c ключом -make libs: qmake для хоста, либы для ARM.

Пробую собрать пример кода, билдится, объектный *.о появляется. Ошибка при линковке subj. Причем путь к либе которую линкует пишет тот где находятся либы для ARM. Так ведь и должно?

buildQt/sysroot/usr/local/Qt-5.9.5/lib/libQt5Core.so: undefined reference to

Нигде в примерах всяких мануалов такое не описывается, там сходу qmake && make и готов бинарник ARM.Может чего-то не указал при сборке Qt? Там был параметр -use-gold-linker по умолч. включен, но это к самой Qt относится вроде, а не к примерам.

Если же саму Qt билдить с -no-use-gold-linker то линковка самой Qt вылетает по такой же ошибке линковки.

buildQt/build/qtbase/lib/libQt5Core.so: undefined reference to

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

Серия таких варнингов:

/opt/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/7.5.0/../../../../arm-linux-gnueabihf/bin/ld: warning: libicui18n.so.60, needed by /home/qq/build/buildQt/sysroot/usr/local/Qt-5.9.5/lib/libQt5Core.so, not found (try using -rpath or -rpath-link)

Потом серия таких ошибок

/home/qq/build/buildQt/sysroot/usr/local/Qt-5.9.5/lib/libQt5Core.so: undefined reference to ucal_getDSTSavings_60
/home/qq/build/buildQt/sysroot/usr/local/Qt-5.9.5/lib/libQt5Core.so: undefined reference to g_main_context_ref
/home/qq/build/buildQt/sysroot/usr/local/Qt-5.9.5/lib/libQt5Core.so: undefined reference to dlerror@GLIBC_2.4
/home/qq/build/buildQt/sysroot/usr/local/Qt-5.9.5/lib/libQt5Core.so: undefined reference to g_main_context_unref

collect2: error: ld returned 1 exit status
make: *** [Makefile:193: dnslookup] Error 1

Похоже libicu* надо инсталлить. Хотя стоит же:

i A libicu-dev                                                                                                    - Development files for International Components for Unicode   
pethead
() автор топика
Последнее исправление: pethead (всего исправлений: 4)

Мммм. Кросскомпиляция с долгими попытками объяснить компилятору где брать библиотеки. Сборочная инфраструктура си-образных как всегда на высоте.

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

Победил, и ведь ни в каких мануалах про это нету, лишь на форумах вопли.

/home/qq/build/buildQt/dnslookup$ file ./dnslookup
./dnslookup: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=946dc9a27fd3c96ecf4d6b1dffbbcd1efb948d8b, not stripped

Придется опять писать самому себе статью про прохождение этого увлекательного квеста.

Решение позже опубликую если оно действительно тут нужно.

pethead
() автор топика
Последнее исправление: pethead (всего исправлений: 2)
Ответ на: комментарий от pethead

Решение позже опубликую если оно действительно тут нужно.

Я думаю лишним не будет.

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

ни в каких мануалах про это нету

Что-то ты всё-таки не так делаешь. Не должно быть таких трудностей и всяких хаков LD_LIBRARY_PATH при кросс-компиляции как самого Qt, так и при кросс-компиляции Qt-приложений.

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

Что же? sysroot/lib, sysroot/usr/lib, sysroot/usr/bin на месте. configure, make, make install работает. Что еще нужно?

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

Брал за основу это https://github.com/UvinduW/Cross-Compiling-Qt-for-Raspberry-Pi-4 Но у меня другая плата, Линукс армбиан. И тут нет про линковку ничего. Так же нет sysroot/usr/bin. И тут у него с ключём nogoldlinker, а у меня с ним ошибка линковки.

pethead
() автор топика
Последнее исправление: pethead (всего исправлений: 3)
Ответ на: комментарий от EXL

Может я его неправильно применил это компилер. Погуглю это.

Приятель кроссбилдил на родном компилере и тулчейне из репо ОС. У меня другая ситуация, надо на Линаровском.

pethead
() автор топика
Последнее исправление: pethead (всего исправлений: 1)
Ответ на: комментарий от pethead

Решение позже опубликую если оно действительно тут нужно.

Конечно, нужно. Пиши.

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

Возможно на linaro похожая бага.

We have investigated the problem. Looks like our Beaglebone toolchain is missing one important file. We will update it soon.

As a workaround please create a file called ld.so.conf in sysroot/etc and put the following contents there:

# Multiarch support
/lib
/usr/lib
pethead
() автор топика
Ответ на: комментарий от pethead

Решение позже опубликую если оно действительно тут нужно

Для этого тут даже отдельный раздел есть (статьи).

Werenter ★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.