shtrih-m / fr_drv_ng

релизы и поддержка драйвера fr_drv_ng
36 stars 5 forks source link

Проблемы со сборкой под armv7hf_le #270

Closed smokie-l closed 1 year ago

smokie-l commented 1 year ago

Добрый день! Уже почти 4 года работаем через ваш драйвер в проекте под Qt. Спасибо за сборку под armhf, очень выручает! Последняя версия, до которой мы обновлялись, была 1.5.0. И судя по описаниям следующих версий, некоторые из наших проблем уже решены в драйвере.

Однако при попытке обновиться до крайнего релиза версии 1.5 возникает ошибка при линковке:

/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::current_exception()@CXXABI_1.3.11'
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::__exception_ptr::exception_ptr::exception_ptr()@CXXABI_1.3.11'
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::__exception_ptr::exception_ptr::~exception_ptr()@CXXABI_1.3.11'
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::__exception_ptr::exception_ptr::swap(std::__exception_ptr::exception_ptr&)@CXXABI_1.3.11'
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr const&)@CXXABI_1.3.11'
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::rethrow_exception(std::__exception_ptr::exception_ptr)@CXXABI_1.3.11'

Ранее этот вопрос уже поднимался, но, вероятно, коллега ограничился запуском console_test_fr_drv_ng в отдельном процессе.

Более того, когда собираемся на актуальной версии происходит страшное:

/usr/bin/ld: onlinecashregister.o: in function `OnlineCashRegister::resultCode()':
onlinecashregister.cpp:(.text+0x6c8): undefined reference to `QClassicFrDrvNg::Get_ResultCode() const'
/usr/bin/ld: onlinecashregister.o: in function `OnlineCashRegister::resultCodeDescription()':
onlinecashregister.cpp:(.text+0x6f0): undefined reference to `QClassicFrDrvNg::Get_ResultCodeDescription() const'
/usr/bin/ld: onlinecashregister.o: in function `OnlineCashRegister::getDocumentNumber()':
onlinecashregister.cpp:(.text+0x864): undefined reference to `QClassicFrDrvNg::Get_DocumentNumber() const'
/usr/bin/ld: onlinecashregister.o: in function `OnlineCashRegister::getFiscalSign()':
onlinecashregister.cpp:(.text+0x874): undefined reference to `QClassicFrDrvNg::Get_FiscalSign() const'
/usr/bin/ld: onlinecashregister.o: in function `OnlineCashRegister::connected() const':
onlinecashregister.cpp:(.text+0x8a8): undefined reference to `QClassicFrDrvNg::Get_Connected() const'
...

Весь лог не привожу. Насколько я понимаю, сломались все обращения к QClassicFrDrvNg, хотя та же версия под mingw-x64 успешно линкуется без каких-либо ошибок. Вызов ./console_test.sh -v тоже почти успешно выполняется:

ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem-${PLATFORM}.so' from /etc/ld.so.preload cannot be preloaded (internal error): ignored.
console_test version: 1.6.0.199
cppbase version: 1.5.0.1098
boost version: 1_82

lscpu:

Architecture:        armv7l
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  4
Socket(s):           1
Vendor ID:           ARM
Model:               3
Model name:          Cortex-A72
Stepping:            r0p3
CPU max MHz:         1800.0000
CPU min MHz:         600.0000
BogoMIPS:            108.00
Flags:               half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32

uname -a:

Linux raspberrypi 5.10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux

gcc -v:

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/10/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Raspbian 10.2.1-6+rpi1' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=arm-linux-gnueabihf- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-sjlj-exceptions --with-arch=armv6 --with-fpu=vfp --with-float=hard --disable-werror --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.2.1 20210110 (Raspbian 10.2.1-6+rpi1)

./libc.so.6:

GNU C Library (Debian GLIBC 2.31-13+rpt2+rpi1) stable release version 2.31.
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 10.2.1 20210110.
libc ABIs: UNIQUE ABSOLUTE

Напомню, что с версией 1.5.0 под _armv7hfle приведённых проблем нет. Подскажите, что мы делаем не так? Или проблема всё-таки с конкретными сборками библиотеки?

swex commented 1 year ago

Однако при попытке обновиться до крайнего релиза версии 1.5 возникает ошибка при линковке:

/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::current_exception()@CXXABI_1.3.11'
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::__exception_ptr::exception_ptr::exception_ptr()@CXXABI_1.3.11'
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::__exception_ptr::exception_ptr::~exception_ptr()@CXXABI_1.3.11'
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::__exception_ptr::exception_ptr::swap(std::__exception_ptr::exception_ptr&)@CXXABI_1.3.11'
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr const&)@CXXABI_1.3.11'
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::rethrow_exception(std::__exception_ptr::exception_ptr)@CXXABI_1.3.11'

Ранее этот вопрос уже поднимался, но, вероятно, коллега ограничился запуском console_test_fr_drv_ng в отдельном процессе.

Это версия libstdc++, хочет более новую.

Более того, когда собираемся на актуальной версии происходит страшное:

/usr/bin/ld: onlinecashregister.o: in function `OnlineCashRegister::resultCode()':
onlinecashregister.cpp:(.text+0x6c8): undefined reference to `QClassicFrDrvNg::Get_ResultCode() const'
/usr/bin/ld: onlinecashregister.o: in function `OnlineCashRegister::resultCodeDescription()':
onlinecashregister.cpp:(.text+0x6f0): undefined reference to `QClassicFrDrvNg::Get_ResultCodeDescription() const'
/usr/bin/ld: onlinecashregister.o: in function `OnlineCashRegister::getDocumentNumber()':
onlinecashregister.cpp:(.text+0x864): undefined reference to `QClassicFrDrvNg::Get_DocumentNumber() const'
/usr/bin/ld: onlinecashregister.o: in function `OnlineCashRegister::getFiscalSign()':
onlinecashregister.cpp:(.text+0x874): undefined reference to `QClassicFrDrvNg::Get_FiscalSign() const'
/usr/bin/ld: onlinecashregister.o: in function `OnlineCashRegister::connected() const':
onlinecashregister.cpp:(.text+0x8a8): undefined reference to `QClassicFrDrvNg::Get_Connected() const'
...

Это загадка. Не могу сказать что стало с оберткой.

Весь лог не привожу. Насколько я понимаю, сломались все обращения к QClassicFrDrvNg, хотя та же версия под mingw-x64 успешно линкуется без каких-либо ошибок. Вызов ./console_test.sh -v тоже почти успешно выполняется:

ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem-${PLATFORM}.so' from /etc/ld.so.preload cannot be preloaded (internal error): ignored.
console_test version: 1.6.0.199
cppbase version: 1.5.0.1098
boost version: 1_82

ну потому что подлинковывается в рантайме более новый libstdc++

lscpu:

Architecture:        armv7l
Byte Order:          Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  4
Socket(s):           1
Vendor ID:           ARM
Model:               3
Model name:          Cortex-A72
Stepping:            r0p3
CPU max MHz:         1800.0000
CPU min MHz:         600.0000
BogoMIPS:            108.00
Flags:               half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32

uname -a:

Linux raspberrypi 5.10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux

gcc -v:

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/10/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Raspbian 10.2.1-6+rpi1' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=arm-linux-gnueabihf- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-sjlj-exceptions --with-arch=armv6 --with-fpu=vfp --with-float=hard --disable-werror --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.2.1 20210110 (Raspbian 10.2.1-6+rpi1)

./libc.so.6:

GNU C Library (Debian GLIBC 2.31-13+rpt2+rpi1) stable release version 2.31.
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 10.2.1 20210110.
libc ABIs: UNIQUE ABSOLUTE

Напомню, что с версией 1.5.0 под _armv7hfle приведённых проблем нет. Подскажите, что мы делаем не так? Или проблема всё-таки с конкретными сборками библиотеки?

Да у вас всё так, просто нужно собрать под ваш тулчейн сборку. Дайте пожалуйста ссылку на дистрибутив (я так понял у вас raspbian) добавим спец сборку.

smokie-l commented 1 year ago

Спасибо за оперативность. Дистрибутив когда-то брали с оф.сайта: https://www.raspberrypi.com/software/operating-systems/ Сейчас там уже bullseye c новым ядром (32-битная версия). Если у вас получится собрать на актуальной версии системы, нас устроит, сможем обновиться.

smokie-l commented 1 year ago

Это загадка. Не могу сказать что стало с оберткой.

Кажется, это тоже связано со сборкой. Если Вам поможет, вот вывод strings libqclassic_fr_drv_ng.so для версии 1.5.0:

__gmon_start__
_init
_fini
_ITM_deregisterTMCloneTable
_ITM_registerTMCloneTable
__cxa_finalize
libclassic_fr_drv_ng.so.1.4
libQt5Core.so.5
libstdc++.so.6
libm.so.6
libgcc_s.so.1
libpthread.so.0
libc.so.6
_ZN15QClassicFrDrvNg28HasCashControlLicenseChangedEb
_ZN15QClassicFrDrvNg20SwapBytesModeChangedEi
_ZN15QClassicFrDrvNg19Tax4NameFontChangedEi
_ZN15QClassicFrDrvNg15LineDataChangedE7QString
_ZN15QClassicFrDrvNg16Summ3FontChangedEi
_ZN15QClassicFrDrvNg15FontTypeChangedEi
_ZN15QClassicFrDrvNg19Tax1RateFontChangedEi
_ZN15QClassicFrDrvNg11GTINChangedE7QString
_ZN15QClassicFrDrvNg17DepartmentChangedEi
_ZN15QClassicFrDrvNg26CashControlPasswordChangedEj
_ZN15QClassicFrDrvNg18EKLZVersionChangedE7QString
_ZN15QClassicFrDrvNg30IBMLastBuyReceiptNumberChangedEi
_ZN15QClassicFrDrvNg29DepartmentSymbolNumberChangedEi
_ZN15QClassicFrDrvNg24Summ3StringNumberChangedEi
_ZN15QClassicFrDrvNg22MaxENQSendCountChangedEi
_ZN15QClassicFrDrvNg16Summ4FontChangedEi
_ZN15QClassicFrDrvNg26Tax4SumStringNumberChangedEi
_ZN15QClassicFrDrvNg14TimeStrChangedE7QString
_ZN15QClassicFrDrvNg18ECRSoftDateChangedE9QDateTime
_ZN15QClassicFrDrvNg18TagValueStrChangedE7QString
_ZN15QClassicFrDrvNg20ChangeSumFontChangedEi
_ZN15QClassicFrDrvNg17DataLengthChangedEi
...
PM_EjectingSlip
PM_WaitingSlipRemoval
PrinterSubmode
PSM_PaperPresent
PSM_PassivePaperAbsense
PSM_ActivePaperAbsense
PSM_AfterAvtivePaperAbsense
PSM_ReportPrintingInProgress
PSM_OperationPrintingInProgress
DeviceFunctionEnumeration
DFE_SkipAllPrinting
basic_string::append
Changed
default
unable to emit changedSignal
GCC: (Buildroot 2018.08-git-00595-g36855f5ce1) 8.1.0
aeabi
.shstrtab
.hash
.dynsym
.dynstr
.gnu.version
.gnu.version_r
.rel.dyn
.rel.plt
.init
.text
.fini
.rodata
.ARM.extab
.ARM.exidx
.eh_frame
.init_array
.fini_array
.data.rel.ro
.dynamic
.got
.data
.bss
.comment
.ARM.attributes

и для версии 1.6.0-13:

__gmon_start__
_init
_fini
_ITM_deregisterTMCloneTable
_ITM_registerTMCloneTable
__cxa_finalize
libclassic_fr_drv_ng.so.1.6
libQt5Core.so.5
libstdc++.so.6
libm.so.6
libgcc_s.so.1
libc.so.6
libqclassic_fr_drv_ng.so.1.4
GLIBC_2.4
$ORIGIN
GCC: (Buildroot 2018.08.4-dirty) 8.4.0
aeabi
.shstrtab
.gnu.hash
.dynsym
.dynstr
.gnu.version
.gnu.version_r
.rel.dyn
.rel.plt
.init
.text
.fini
.eh_frame
.init_array
.fini_array
.dynamic
.got
.data
.bss
.comment
.ARM.attributes

Ну и весит библиотека соответственно больше в старом релизе:

-rwxr-xr-x 1 pi pi 812K Oct  4 16:46 libqclassic_fr_drv_ng.so

против 1.6.0-13:

-rwxr-xr-x 1 pi pi 5.2K Oct  4 13:36 libqclassic_fr_drv_ng.so.1.4
swex commented 1 year ago

Спасибо за оперативность. Дистрибутив когда-то брали с оф.сайта: https://www.raspberrypi.com/software/operating-systems/ Сейчас там уже bullseye c новым ядром (32-битная версия). Если у вас получится собрать на актуальной версии системы, нас устроит, сможем обновиться.

а вы попробуйте запустить на bulleye, должно завестись.

smokie-l commented 1 year ago

Здравствуйте. Да в том и беда, что были уже на 11ом. cat /etc/os-release:

PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)"
NAME="Raspbian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=raspbian
ID_LIKE=debian

Имел ввиду, что версия ядра уже не 5.10, а 6.1. Вот, что выводится на последней версии ОС. gcc -v:

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/10/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Raspbian 10.2.1-6+rpi1' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=arm-linux-gnueabihf- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-sjlj-exceptions --with-arch=armv6 --with-fpu=vfp --with-float=hard --disable-werror --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 10.2.1 20210110 (Raspbian 10.2.1-6+rpi1)

./libc.so.6:

GNU C Library (Debian GLIBC 2.31-13+rpt2+rpi1+deb11u5) stable release version 2.31.
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 10.2.1 20210110.
libc ABIs: UNIQUE ABSOLUTE

При попытке собрать:

/usr/bin/ld: onlinecashregister.o: in function `OnlineCashRegister::resultCode()':
onlinecashregister.cpp:(.text+0x6c8): undefined reference to `QClassicFrDrvNg::Get_ResultCode() const'
...
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::current_exception()@CXXABI_1.3.11'
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::__exception_ptr::exception_ptr::exception_ptr()@CXXABI_1.3.11'
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::__exception_ptr::exception_ptr::~exception_ptr()@CXXABI_1.3.11'
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::__exception_ptr::exception_ptr::swap(std::__exception_ptr::exception_ptr&)@CXXABI_1.3.11'
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::__exception_ptr::exception_ptr::exception_ptr(std::__exception_ptr::exception_ptr const&)@CXXABI_1.3.11'
/usr/bin/ld: src/fr_drv_ng/linux/armv7hf_le/libclassic_fr_drv_ng.so: undefined reference to `std::rethrow_exception(std::__exception_ptr::exception_ptr)@CXXABI_1.3.11'

Это версия libstdc++, хочет более новую.

Может с чем-то ещё связано? Если проблема с версией libstdc++, тогда не ясно, почему собранная на GCC 8.1 сборка для 1.5.0, вероятно, с той же версией libstdc++, без проблем заводится в окружении с GCC 10.2.1.

smokie-l commented 1 year ago

Добрый день. Пока остаёмся на старой версии, правильно понял?

swex commented 1 year ago

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

smokie-l commented 1 year ago

На новый функционал пока не претендуем, но обновиться и поправить старые ошибки нам уже пора бы. Ждём, спасибо!

swex commented 1 year ago

В свежем релизе добавлен вариант сборки под ubuntu 20.04 armhf кроме того qclassic теперь публичный

smokie-l commented 1 year ago

Здравствуйте! Спасибо, забрали новый qclassic. Со сборкой fr_drv_ng_ubuntu_arm_linux_gnueabihf_1.6.0-14-g0fbabb3.zip (про неё речь?) теперь линковка успешно проходит и приложение работает с кассой!