Ошибка сборки QtWebengine с кодеками opus и silk

Я пытаюсь собрать Qt5.9.1 с QtWebengine для платформы arm. Вот некоторые архитектурные аргументы, которые я передаю в сборку.

QMAKE_CFLAGS_RELEASE += -march=armv7-a -mcpu=cortex-a9 
QMAKE_CXXFLAGS_RELEASE += -march=armv7-a -mcpu=cortex-a9

По умолчанию я вижу, что сборка идет и для этих значений.

-mfloat-abi=hard -mtune=generic-armv7-a -mfpu=vfpv3-d16 -mthumb

Это ошибка, с которой я сталкиваюсь.

Насколько я знаю, в cortex-a9 неон не обязателен, и мой конкретный SoC не поддерживает неон. Также -print-multi-lib предоставляет этот arm400-linux-g++ -print-multi-lib

armv5te_arm9;@mcpu=arm926ej-s
a9;@mcpu=cortex-a9
a7;@mcpu=cortex-a7
armv5te_arm9_soft;@mcpu=arm926ej-s@mfloat-abi=soft
armv5te_arm9_vfp;@mcpu=arm926ej-s@mfloat-abi=softfp@mfpu=vfp
a9_soft;@mcpu=cortex-a9@mfloat-abi=soft
a9_softfp_vfp;@mcpu=cortex-a9@mfloat-abi=softfp@mfpu=vfp
a9_softfp_vfpv3-d16;@mcpu=cortex-a9@mfloat-abi=softfp@mfpu=vfpv3-d16
a7_soft;@mcpu=cortex-a7@mfloat-abi=soft
a7_softfp_vfpv4;@mcpu=cortex-a7@mfloat-abi=softfp@mfpu=vfpv4
a7_softfp_neon-vfpv4;@mcpu=cortex-a7@mfloat-abi=softfp@mfpu=neon-vfpv4
a7_hard_neon-vfpv4;@mcpu=cortex-a7@mfloat-abi=hard@mfpu=neon-vfpv4

Я попытался передать эти три возможных аргумента архитектуры в mkspecs.

QMAKE_CFLAGS_RELEASE += -march=armv7-a -mcpu=cortex-a9 -mfloat-abi=soft
QMAKE_CXXFLAGS_RELEASE += -march=armv7-a -mcpu=cortex-a9 -mfloat-abi=soft 

За это я получил

"arm400-linux-g++: error: -mfloat-abi=soft and -mfloat-abi=hard may not be used together".

Я также пытался передать эти аргументы

-mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=vfp

-mcpu=cortex-a9 -mfloat-abi=softfp -mfpu=vfpv3-d16

Но это имело тот же эффект.

libxxxx.a(yyyyy.o) uses VFP register arguments, libQt5WebEngineCore.so.5.9.1 does not

У меня заканчиваются варианты здесь. Почему возникает эта проблема?

1 ответ

Вы должны собрать все библиотеки с той же опцией VFP, что и у вашего исходного кода.

В соответствии с ATPCS(Стандарт вызова процедуры ARM-Thumb), параметры с плавающей точкой передаются регистрами VFP, если они доступны. В противном случае они передаются целочисленными регистрами ARM.

Если lib A скомпилирована с опцией soft-float, вы не можете вызывать ее функции из-за конфликта ABI из lib B или наоборот.

Если у вас нет определенного исходного кода библиотеки, но бинарного, единственный вариант - сопоставить параметры сборки других проектов с библиотеками.

Однако велика вероятность, что вы найдете разные версии библиотеки с различными вариантами сборки.

Другие вопросы по тегам