Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Qt 5.7 Coss-Compile with Raspberry Pi 3



  • I have apt-get install gstreamer1.0* and install tslib1.4 on Raspberry Pi 3.
    BUT when I configure Qt-opensource-everywhere, it shows
    checking for tslib... no.
    The tslib functionality test failed!
    and also
    checking for gstreamer... no.
    The gstreamer 1.0 functionality test failed!

    what should I do?


  • Lifetime Qt Champion

    @ascnp You should install the dev packages for gstreamer1.0* and tslib1.4, they contain the header files.
    Also, do you really cross-compile or do you compile on Raspberry?



  • @jsulm
    I have installed gstreamer 1.0-dev and tslib1.4. But Qt can't find them. I install tslib in /usr/local/tslib and apt-get install gstreamer1.0-dev. I guess it is because I install in the wrong path. But I don't know where should I install.
    I am really cross-compile. That means I build Qt on my x86 computer and install on x86, but some shared lib is on raspberry. I finish my code on x86 and build on x86 but remote debug or release on raspberry.



  • @jsulm
    The installed gstreamer-dev is as follow.(On Raspberry Pi)

    gstreamer1.0-clutter-3.0 (3.0.18-1)。
    gstreamer1.0-clutter (2.0.18-1)。
    gstreamer1.0-dvswitch (0.1.1-1)。
    gstreamer1.0-espeak (0.4.0-1)。
    gstreamer1.0-fluendo-mp3 (0.10.32.debian-1)。
    gstreamer1.0-nice (0.1.13-0ubuntu2)。
    gstreamer1.0-pocketsphinx (0.8.0+real5prealpha-1ubuntu2)。
    gstreamer1.0-alsa (1.8.2-1ubuntu0.1)。
    gstreamer1.0-doc (1.8.2-1~ubuntu1)。
    gstreamer1.0-plugins-base (1.8.2-1ubuntu0.1)。
    gstreamer1.0-plugins-base-apps (1.8.2-1ubuntu0.1)。
    gstreamer1.0-plugins-base-dbg (1.8.2-1ubuntu0.1)。
    gstreamer1.0-plugins-base-doc (1.8.2-1ubuntu0.1)。
    gstreamer1.0-plugins-good (1.8.2-1ubuntu0.1)。
    gstreamer1.0-plugins-good-dbg (1.8.2-1ubuntu0.1)。
    gstreamer1.0-plugins-good-doc (1.8.2-1ubuntu0.1)。
    gstreamer1.0-pulseaudio (1.8.2-1ubuntu0.1)。
    gstreamer1.0-tools (1.8.2-1~ubuntu1)。
    gstreamer1.0-x (1.8.2-1ubuntu0.1)。
    gstreamer1.0-hybris (1.8.2-1ubuntu0.1)。
    gstreamer1.0-libav (1.8.2-1~ubuntu1)。
    gstreamer1.0-libav-dbg (1.8.2-1~ubuntu1)。
    gstreamer1.0-packagekit (0.8.17-4ubuntu6~gcc5.4ubuntu1.1)。
    gstreamer1.0-plugins-bad (1.8.2-1ubuntu0.1)。
    gstreamer1.0-plugins-bad-dbg (1.8.2-1ubuntu0.1)。
    gstreamer1.0-plugins-bad-doc (1.8.2-1ubuntu0.1)。
    gstreamer1.0-plugins-bad-faad (1.8.2-1ubuntu0.1)。
    gstreamer1.0-plugins-bad-videoparsers (1.8.2-1ubuntu0.1)。
    gstreamer1.0-plugins-ugly (1.8.2-1ubuntu0.1)。
    gstreamer1.0-plugins-ugly-amr (1.8.2-1ubuntu0.1)。
    gstreamer1.0-plugins-ugly-dbg (1.8.2-1ubuntu0.1)。
    gstreamer1.0-plugins-ugly-doc (1.8.2-1ubuntu0.1)。
    gstreamer1.0-vaapi (1.8.2-1~ubuntu2)。
    gstreamer1.0-vaapi-doc (1.8.2-1~ubuntu2)。


  • Lifetime Qt Champion

    @ascnp That I don't understand (it actually doesn't make sense):
    "That means I build Qt on my x86 computer and install on x86, but some shared lib is on raspberry."
    Raspberry is not x86, it is ARM. So, how exactly do you build for Raspberry? To cross compile you need a sysroot (basically the filesystem of your target device). This sysroot must contain all needed libraries and header files. I guess you installed the *dev packages on your x86 system? If so this will not help at all. You need to install them on your Raspberry SDCard (you can do it on Raspberry directly) then put this SDCard into your PC mount it and use it as sysroot.
    You can find information here http://wiki.qt.io/Qt_RaspberryPi



  • @jsulm
    I know that. I am exactly doing that. First, I install tslib1.4 and gstreamer1.0 on raspberry. And then mount the raspberry SD card on my x86 system. I also get a cross-compile tools. All I list gstreamer1.0-dev is install on my Raspberry. But when I configure qt, it can't find them.


  • Lifetime Qt Champion

    @ascnp Why did you install the dev packages in /usr/local? I'm not sure whether configure looks there by default. You can try to pass these directories to configure, or even better install the packages in their default locations.



  • @jsulm
    you mean /usr/lib? Actually, I am not quite sure where should I install tslib. I have tried to copy all tslib file to /usr/lib, but it didn't work. But my gstreamer1.0 is install by apt-get. Qt also can't find gstreamer. That don't make sense.


  • Qt Champions 2017

    @ascnp said in QT5.7 Coss-Compile with Raspberry Pi 3:

    gstreamer1.0-nice (0.1.13-0ubuntu2)
    gstreamer1.0-pocketsphinx (0.8.0+real5prealpha-1ubuntu2)
    gstreamer1.0-alsa (1.8.2-1ubuntu0.1)
    ...

    I have no experience with rpi, but why do you have ubuntu packages installed on a debian? It looks wrong.
    For example: https://packages.debian.org/jessie/gstreamer1.0-alsa
    There isn't any ubuntu mentioned there.

    @jsulm said in QT5.7 Coss-Compile with Raspberry Pi 3:

    I'm not sure whether configure looks there by default.

    It does, at least for /usr/local/lib and /usr/local/include.


  • Moderators

    @ascnp When nothing works try running configure script with -v(verbose) option. It will exactly show what it requires and what is missing and also exact file locations.



  • @kshegunov
    I have ubuntu mate on Raspberry. So it automatically install ubuntu version dev. Actually it is almost the same as jessie.


  • Lifetime Qt Champion

    @ascnp Can you post the output of configure (at least where it says it cannot find)? You should see what exactly didn't work: header file not found, libs not found, ...



  • @p3c0
    I add -v and it shows

    the tslib:
    checking for tslib...
    /home/lxy/Downloads/qt5.7安装/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++ -c -pipe -marm -mfpu=vfp -mtune=arm1176jzf-s -march=armv6zk -mabi=aapcs-linux -mfloat-abi=hard --sysroot=/opt/rasp-pi-rootfs-qt5.7 -O2 -Wall -W -fPIC -I. -I/opt/rasp-pi-rootfs-qt5.7/usr/local/tslib -I../../../mkspecs/devices/linux-rasp-pi-g++ -o tslib.o tslib.cpp
    tslib.cpp:40:19: fatal error: tslib.h: No such file or directory
    compilation terminated.
    Makefile:195: recipe for target 'tslib.o' failed
    make: *** [tslib.o] Error 1
    tslib disabled.
    The tslib functionality test failed!

    and gstreamer1.0:
    checking for GStreamer 1.0...
    Project ERROR: gstreamer-audio-1.0 development package not found
    GStreamer 1.0 disabled.
    The GStreamer 1.0 functionality test failed!

    It looks like that I don't install tslib in the correct path. But I don't know where should I install.
    I will check if I really install gsreamer-audio-1.0


  • Moderators

    @ascnp Looks like tslib.h is missing in one of the included paths probably /opt/rasp-pi-rootfs-qt5.7/usr/local/tslib



  • @p3c0

    $ ls -R
    .:
    bin etc include lib

    ./bin:
    ts_calibrate ts_harvest ts_print ts_print_raw ts_test

    ./etc:
    ts.conf

    ./include:
    tslib.h

    ./lib:
    libts-0.0.so.0 libts-0.0.so.0.1.1 libts.la libts.so pkgconfig ts

    ./lib/pkgconfig:
    tslib-0.0.pc

    ./lib/ts:
    arctic2.la corgi.la h3600.la linear_h2200.la mk712.la ucb1x00.la
    arctic2.so corgi.so h3600.so linear_h2200.so mk712.so ucb1x00.so
    collie.la dejitter.la input.la linear.la pthres.la variance.la
    collie.so dejitter.so input.so linear.so pthres.so variance.so

    As is shown above, tslib.h is in /usr/local/tslib/include.

    And I find that I did not have gstreamer1.0-audio. And apt-get can't get gstreamer1.0-audio.


  • Lifetime Qt Champion

    @ascnp It should be -I/opt/rasp-pi-rootfs-qt5.7/usr/local/tslib/include
    And as this error tells:

    Project ERROR: gstreamer-audio-1.0 development package not found
    

    you need gstreamer-audio-1.0 development package



  • @jsulm
    yes, it is in /opt/rasp-pi-rootfs-qt5.7/usr/local/tslib/include. Because I run ls -R on raspberry, so it seems in the wrong path. But when I mount SD card on x86 system, it will be in the path as you say.

    I am trying to install gstreamer1.0-audio. But apt-get can't find it.


  • Qt Champions 2017

    @ascnp said in QT5.7 Coss-Compile with Raspberry Pi 3:

    yes, it is in /opt/rasp-pi-rootfs-qt5.7/usr/local/tslib/include.

    How did it end up there? /usr/local/tslib isn't a standard search location for includes.
    Edit: Don't mind me, it doesn't really matter as it's passed as an additional include path.

    PS
    I don't know how correct you are by saying your distro is almost the same as jessie, as jessie doesn't provide libts at all. It appears to be deprecated or something.


  • Lifetime Qt Champion

    @ascnp No, what I mean is: you need to pass -I/opt/rasp-pi-rootfs-qt5.7/usr/local/tslib/include instead of -I/opt/rasp-pi-rootfs-qt5.7/usr/local/tslib to configure. Or move the header file one directory up (to /opt/rasp-pi-rootfs-qt5.7/usr/local/tslib).

    /home/lxy/Downloads/qt5.7安装/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++ -c -pipe -marm -mfpu=vfp -mtune=arm1176jzf-s -march=armv6zk -mabi=aapcs-linux -mfloat-abi=hard --sysroot=/opt/rasp-pi-rootfs-qt5.7 -O2 -Wall -W -fPIC -I. -I/opt/rasp-pi-rootfs-qt5.7/usr/local/tslib -I../../../mkspecs/devices/linux-rasp-pi-g++ -o tslib.o tslib.cpp
    

    Regarding gsreamer-audio-1.0: I don't know what the correct name is. Just list all gstreamer packages and see whether you can find one with audio (maybe gsreamer-alsa-1.0?).


  • Moderators

    @ascnp said in QT5.7 Coss-Compile with Raspberry Pi 3:

    @jsulm
    yes, it is in /opt/rasp-pi-rootfs-qt5.7/usr/local/tslib/include. Because I run ls -R on raspberry, so it seems in the wrong path. But when I mount SD card on x86 system, it will be in the path as you say.

    I am trying to install gstreamer1.0-audio. But apt-get can't find it.

    Try installing libgstreamer-plugins-base1.0-dev



  • @kshegunov
    I also doubt that the path is not a standard search path, so that qt can not find them. I said "ubuntu mate is almost the same as jessie", which means they are both arm arch and have the same Instruction set, because they can both run on raspberry pi. So they have the same compile tools. I'm a newbie of linux system lol, so I don't know much more about the os. All I want is to finish build qt and start coding. I use qt 5.4.1before, and it is really hard to upgrade software like Qt's version in linux.

    @jsulm
    I did not find anything like gstreamer-audio. I am going to isntall all I can install about gstreamer1.0 without thinking lol..

    @p3c0
    After installing libgstreamer-plugins-base1.0-dev, it shows:
    checking for GStreamer 1.0...

    /home/lxy/Downloads/qt5.7安装/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++ -c -pipe -marm -mfpu=vfp -mtune=arm1176jzf-s -march=armv6zk -mabi=aapcs-linux -mfloat-abi=hard --sysroot=/opt/rasp-pi-rootfs-qt5.7 -O2 -pthread -pthread -pthread -pthread -pthread -Wall -W -fPIC  -I. -I/opt/rasp-pi-rootfs-qt5.7/usr/include/gstreamer-1.0 -I/opt/rasp-pi-rootfs-qt5.7/usr/lib/arm-linux-gnueabihf/gstreamer-1.0/include -I/opt/rasp-pi-rootfs-qt5.7/usr/include/glib-2.0 -I/opt/rasp-pi-rootfs-qt5.7/usr/lib/arm-linux-gnueabihf/glib-2.0/include -I../../../mkspecs/devices/linux-rasp-pi-g++ -o gstreamer.o gstreamer.cpp
    /home/lxy/Downloads/qt5.7安装/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++ -Wl,-rpath-link,/opt/rasp-pi-rootfs-qt5.7/opt/vc/lib -Wl,-rpath-link,/opt/rasp-pi-rootfs-qt5.7/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link,/opt/rasp-pi-rootfs-qt5.7/lib/arm-linux-gnueabihf -mfloat-abi=hard -Wl,-O1 -o gstreamer gstreamer.o   --sysroot=/opt/rasp-pi-rootfs-qt5.7 -L/opt/rasp-pi-rootfs-qt5.7/usr/lib/arm-linux-gnueabihf -lgstaudio-1.0 -lgstvideo-1.0 -lgstbase-1.0 -lgstpbutils-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0
    /home/lxy/Downloads/qt5.7安装/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/bin/ld: /opt/rasp-pi-rootfs-qt5.7/usr/lib/arm-linux-gnueabihf/libglib-2.0.a(libglib_2_0_la-gthread-posix.o): undefined reference to symbol 'pthread_getspecific@@GLIBC_2.4'
    /home/lxy/Downloads/qt5.7安装/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/bin/ld: note: 'pthread_getspecific@@GLIBC_2.4' is defined in DSO /opt/rasp-pi-rootfs-qt5.7/lib/arm-linux-gnueabihf/libpthread.so.0 so try adding it to the linker command line
    /opt/rasp-pi-rootfs-qt5.7/lib/arm-linux-gnueabihf/libpthread.so.0: could not read symbols: Invalid operation
    collect2: error: ld returned 1 exit status
    Makefile:92: recipe for target 'gstreamer' failed
    make: *** [gstreamer] Error 1
    GStreamer 1.0 disabled.
    The GStreamer 1.0 functionality test failed!
    

    it seems that I need something else.


  • Lifetime Qt Champion

    @ascnp said in QT5.7 Coss-Compile with Raspberry Pi 3:

    gnueabihf/bin/ld: note: 'pthread_getspecific@@GLIBC_2.4' is defined in DSO /opt/rasp-pi-rootfs-qt5.7/lib/arm-linux-gnueabihf/libpthread.so.0 so try adding it to the linker command line

    This tells you what you need to do: add /opt/rasp-pi-rootfs-qt5.7/lib/arm-linux-gnueabihf as directory for libraries (-L/opt/rasp-pi-rootfs-qt5.7/lib/arm-linux-gnueabihf). It's not related to gstreamer anymore.



  • @jsulm
    I add -L/opt/rasp-pi-rootfs-qt5.7/lib/arm-linux-gnueabihf in configure code, but still the same error.



  • I google the error
    "libpthread.so.0: could not read symbols: Invalid operation"
    and find that it is caused by command linker command line. But I try adding the path to linker command line with -L and ldconfig, but didn't work. And another way to solve this is add -lpthread after ./configer. and it did work. But another error comes.

    "/home/lxy/Downloads/qt5.7安装/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/bin/ld: /opt/rasp-pi-rootfs-qt5.7/usr/lib/arm-linux-gnueabihf/libglib-2.0.a(libglib_2_0_la-gregex.o): undefined reference to symbol 'pcre_study'
    /home/lxy/Downloads/qt5.7安装/gcc-4.7-linaro-rpi-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.7.2/../../../../arm-linux-gnueabihf/bin/ld: note: 'pcre_study' is defined in DSO /opt/rasp-pi-rootfs-qt5.7/lib/arm-linux-gnueabihf/libpcre.so.3 so try adding it to the linker command line
    /opt/rasp-pi-rootfs-qt5.7/lib/arm-linux-gnueabihf/libpcre.so.3: could not read symbols: Invalid operation
    collect2: error: ld returned 1 exit status
    Makefile:92: recipe for target 'gstreamer' failed
    make: *** [gstreamer] Error 1
    GStreamer 1.0 disabled."

    Linker command line again! And adding to linker command line with ldconfig and -L, but not work again. Now I really don't know how to solve the proble. Is my pkg-config or compile tools broken?



  • I find another strange thing. Before checking gstreamer1.0, qt test system pcre, and the most strange thing is that it sucess!

    checking for PCRE...
    /home/lxy/Downloads/qt5.7安装/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++ -c -pipe -marm -mfpu=vfp -mtune=arm1176jzf-s -march=armv6zk -mabi=aapcs-linux -mfloat-abi=hard --sysroot=/opt/rasp-pi-rootfs-qt5.7 -O2 -Wall -W -fPIC -I. -I/opt/rasp-pi-rootfs-qt5.7/usr/local/tslib/include -I../../../mkspecs/devices/linux-rasp-pi-g++ -o pcre.o pcre.cpp
    /home/lxy/Downloads/qt5.7安装/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++ -Wl,-rpath-link,/opt/rasp-pi-rootfs-qt5.7/opt/vc/lib -Wl,-rpath-link,/opt/rasp-pi-rootfs-qt5.7/usr/lib/arm-linux-gnueabihf -Wl,-rpath-link,/opt/rasp-pi-rootfs-qt5.7/lib/arm-linux-gnueabihf -mfloat-abi=hard -Wl,-O1 -o pcre pcre.o --sysroot=/opt/rasp-pi-rootfs-qt5.7 -L/opt/rasp-pi-rootfs-qt5.7/lib/arm-linux-gnueabihf/ -L/opt/rasp-pi-rootfs-qt5.7/usr/lib -L/opt/rasp-pi-rootfs-qt5.7/lib -L/opt/rasp-pi-rootfs-qt5.7/usr/local/tslib/ -lpthread -lpcre -lpcre16
    PCRE enabled.

    But when cheking gstreamer1.0, the libglib-2.0.a(libglib_2_0_la-gregex.o) has a referebce to pcre_study , and it tried to find libpcre.so.3, but says the lib is not in the linker command line. Why is it? Is that means when qt checking diffenrent part, it will set different linker command line, but not the all-use same lib?


Log in to reply