Build error trying to cross compile for embedded Linux
-
I have successfully cross compiled Qt 5.2 for my am335x starter kit running ti's 6.0 sdk before but for some reason I no longer can get it to complie. I get this error...
.obj/qdrawhelper.o:qdrawhelper.cpp:(.text+0x72a6): more undefined references to
qt_memfill32(unsigned int*, unsigned int, int)' follow .obj/qdrawhelper.o: In function
qInitDrawhelperAsm()':
qdrawhelper.cpp:(.text+0x1a2b0): undefined reference toqt_blend_rgb32_on_rgb32_neon(unsigned char*, int, unsigned char const*, int, int, int, int)' qdrawhelper.cpp:(.text+0x1a2b4): undefined reference to
qt_blend_argb32_on_argb32_neon(unsigned char*, int, unsigned char const*, int, int, int, int)'
qdrawhelper.cpp:(.text+0x1a2b8): undefined reference toqt_blend_argb32_on_rgb16_neon(unsigned char*, int, unsigned char const*, int, int, int, int)' qdrawhelper.cpp:(.text+0x1a2bc): undefined reference to
qt_blend_rgb16_on_argb32_neon(unsigned char*, int, unsigned char const*, int, int, int, int)'
qdrawhelper.cpp:(.text+0x1a2c0): undefined reference toqt_blend_rgb16_on_rgb16_neon(unsigned char*, int, unsigned char const*, int, int, int, int)' qdrawhelper.cpp:(.text+0x1a2c8): undefined reference to
qt_scale_image_argb32_on_rgb16_neon(unsigned char*, int, unsigned char const*, int, QRectF const&, QRectF const&, QRect const&, int)'
qdrawhelper.cpp:(.text+0x1a2cc): undefined reference toqt_scale_image_rgb16_on_rgb16_neon(unsigned char*, int, unsigned char const*, int, QRectF const&, QRectF const&, QRect const&, int)' qdrawhelper.cpp:(.text+0x1a2d0): undefined reference to
qt_transform_image_argb32_on_rgb16_neon(unsigned char*, int, unsigned char const*, int, QRectF const&, QRectF const&, QRect const&, QTransform const&, int)'
qdrawhelper.cpp:(.text+0x1a2d8): undefined reference toqt_transform_image_rgb16_on_rgb16_neon(unsigned char*, int, unsigned char const*, int, QRectF const&, QRectF const&, QRect const&, QTransform const&, int)' qdrawhelper.cpp:(.text+0x1a2dc): undefined reference to
qt_alphamapblit_quint16_neon(QRasterBuffer*, int, int, unsigned int, unsigned char const*, int, int, int, QClipData const*)'
qdrawhelper.cpp:(.text+0x1a2e4): undefined reference toqt_blend_argb32_on_argb32_scanline_neon(unsigned int*, unsigned int const*, int, unsigned int)' qdrawhelper.cpp:(.text+0x1a2ec): undefined reference to
comp_func_solid_SourceOver_neon(unsigned int*, int, unsigned int, unsigned int)'
qdrawhelper.cpp:(.text+0x1a2f0): undefined reference tocomp_func_Plus_neon(unsigned int*, unsigned int const*, int, unsigned int)' qdrawhelper.cpp:(.text+0x1a2f4): undefined reference to
qt_destFetchRGB16_neon(unsigned int*, QRasterBuffer*, int, int, int)'
qdrawhelper.cpp:(.text+0x1a2f8): undefined reference toqt_destStoreRGB16_neon(QRasterBuffer*, int, int, unsigned int const*, int)' qdrawhelper.cpp:(.text+0x1a300): undefined reference to
qt_memrotate90_16_neon(unsigned char const*, int, int, int, unsigned char*, int)'
qdrawhelper.cpp:(.text+0x1a304): undefined reference toqt_memrotate270_16_neon(unsigned char const*, int, int, int, unsigned char*, int)' qdrawhelper.cpp:(.text+0x1a308): undefined reference to
qt_fetch_radial_gradient_neon(unsigned int*, Operator const*, QSpanData const*, int, int, int)'
.obj/qdrawhelper.o: In functionvoid qt_rectfill<unsigned int>(unsigned int*, unsigned int, int, int, int, int, int)': qdrawhelper.cpp:(.text+0x67e0): undefined reference to
qt_memfill32(unsigned int*, unsigned int, int)'
.obj/qdrawhelper.o: In functionrasterop_solid_NotSource(unsigned int*, int, unsigned int, unsigned int)': qdrawhelper.cpp:(.text+0x6844): undefined reference to
qt_memfill32(unsigned int*, unsigned int, int)'
.obj/qdrawhelper.o: In functioncomp_func_solid_Source(unsigned int*, int, unsigned int, unsigned int)': qdrawhelper.cpp:(.text+0x69f2): undefined reference to
qt_memfill32(unsigned int*, unsigned int, int)'
.obj/qdrawhelper.o: In functioncomp_func_Clear(unsigned int*, unsigned int const*, int, unsigned int)': qdrawhelper.cpp:(.text+0x6b56): undefined reference to
qt_memfill32(unsigned int*, unsigned int, int)'
.obj/qdrawhelper.o: In functioncomp_func_solid_Clear(unsigned int*, int, unsigned int, unsigned int)': qdrawhelper.cpp:(.text+0x6cba): undefined reference to
qt_memfill32(unsigned int*, unsigned int, int)'
.obj/qdrawhelper.o:qdrawhelper.cpp:(.text+0x6e6e): more undefined references toqt_memfill32(unsigned int*, unsigned int, int)' follow collect2: error: ld returned 1 exit status make[3]: *** [../../lib/libQt5Gui.so.5.3.0] Error 1 make[3]: Leaving directory
/home/nrogers/dev/qt-everywhere-opensource-src-5.3.0-beta/qtbase/src/gui'
make[2]: *** [sub-gui-make_first] Error 2
make[2]: Leaving directory/home/nrogers/dev/qt-everywhere-opensource-src-5.3.0-beta/qtbase/src' make[1]: *** [sub-src-make_first] Error 2 make[1]: Leaving directory
/home/nrogers/dev/qt-everywhere-opensource-src-5.3.0-beta/qtbase'
make: *** [module-qtbase-make_first] Error 2Any idea's on what I am doing wrong? Thanks!
-
Which linux version are you using on your host PC? Have you made an update in the past few days of your operatingsystem. I think the libQt5Gui.so.5.3.0 is no longer installed on your host PC. If your toolchain requires this library and she is not available it causes an error.
-
You can try to install this library manually. You have to search in the internet how you can install this library I think you will find an instruction. If this won't work you have to contact the support of your distributer and ask him for a solution. In my case I had the same problem and it seems that I have to upgrade my toolchain.
-
@QtTommy: I do not think so... I have the same problem too (cross-compiling Qt 5.3.0 for AM335x Starter Kit)... but I don't think it is depending on Qt version on host system... Actually I am cross-compiling Qt and the problem originates when Qt is compiling libQt5Gui.so.5.3.0...
In other words the error doesn't refer to libQt5Gui.so.5.3.0 on host system but simply tells that the compiler is facing some problems when compiling that library...
@Nate R.: have you find a solution for this problem?
Anyway I am going to investigate about it and I'll share my solution (if I will be able to fix it)...
-
Ok, I found a solution which seems to work...
The problem seems to be in automatic detection of platform features... for some reasons (which I am not able to understand) "neon" functions (at least in my case) are not compiled by Qt even if the "./configure" summary shows that "neon" extensions will be automatically detected ("auto").
So, I fixed the problem simply forcing Qt to compile "neon" support for ARM processor, simply modifying the following lines in "qtbase/mkspecs/qmodule.pri" after "./configure":
@host_build {
QT_CPU_FEATURES.i386 =
} else {
QT_CPU_FEATURES.arm = neon
}@I've added "neon" (previously the QT_CPU_FEATURES.arm variable was empty).