Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. compile avahi to generate shared libraries for Android

compile avahi to generate shared libraries for Android

Scheduled Pinned Locked Moved Solved Mobile and Embedded
7 Posts 3 Posters 2.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    a_so
    wrote on last edited by
    #1

    Hello, I would like to deploy my Qt 5.8 application to my Android phone (android-21). During step make I get the error messages below. The project uses Avahi for mDNS services. I guess this can be resolved by building avahi for arm architecture.

    /media/qt5-qwt6/ndk10/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9/../../../../arm-linux-androideabi/bin/ld: error: cannot find -ldns_sd
    ../sozius-client/so_bonjourservicebrowser.cpp:57: error: undefined reference to 'DNSServiceRefDeallocate'
    ../sozius-client/so_bonjourservicebrowser.cpp:92: error: undefined reference to 'DNSServiceBrowse'
    ../sozius-client/so_bonjourservicebrowser.cpp:103: error: undefined reference to 'DNSServiceRefSockFD'
    ../sozius-client/so_bonjourservicebrowser.cpp:138: error: undefined reference to 'DNSServiceProcessResult'
    ../sozius-client/so_bonjourserviceresolver.cpp:79: error: undefined reference to 'DNSServiceRefDeallocate'
    ../sozius-client/so_bonjourserviceresolver.cpp:121: error: undefined reference to 'DNSServiceResolve'
    ../sozius-client/so_bonjourserviceresolver.cpp:132: error: undefined reference to 'DNSServiceRefSockFD'
    ../sozius-client/so_bonjourserviceresolver.cpp:169: error: undefined reference to 'DNSServiceProcessResult'
    ../sozius-client/so_bonjourservicereconfirmer.cpp:46: error: undefined reference to 'DNSServiceQueryRecord'
    ../sozius-client/so_bonjourservicereconfirmer.cpp:57: error: undefined reference to 'DNSServiceRefSockFD'
    ../sozius-client/so_bonjourservicereconfirmer.cpp:104: error: undefined reference to 'DNSServiceProcessResult'
    ../sozius-client/so_bonjourservicereconfirmer.cpp:122: error: undefined reference to 'DNSServiceConstructFullName'
    ../sozius-client/so_bonjourservicereconfirmer.cpp:140: error: undefined reference to 'DNSServiceRefDeallocate'
    ../sozius-client/so_bonjourservicereconfirmer.cpp:161: error: undefined reference to 'DNSServiceReconfirmRecord'
    ../sozius-client/so_bonjourservicequeryrecord.cpp:84: error: undefined reference to 'DNSServiceQueryRecord'
    ../sozius-client/so_bonjourservicequeryrecord.cpp:99: error: undefined reference to 'DNSServiceRefSockFD'
    ../sozius-client/so_bonjourservicequeryrecord.cpp:133: error: undefined reference to 'DNSServiceProcessResult'
    ../sozius-client/so_bonjourservicequeryrecord.cpp:145: error: undefined reference to 'DNSServiceRefDeallocate'
    ../sozius-client/so_bonjourservice.cpp:43: error: undefined reference to 'TXTRecordGetCount'
    ../sozius-client/so_bonjourservice.cpp:47: error: undefined reference to 'TXTRecordGetItemAtIndex'
    ../sozius-client/so_bonjourservice.cpp:229: error: undefined reference to 'DNSServiceConstructFullName'
    collect2: error: ld returned 1 exit status
    make: *** [../build/Linux/debug/libsozius-client.so] Error 1
    16:38:47: The process "/usr/bin/make" exited with code 2.
    Error while building/deploying project sozius-client (kit: Android for armeabi-v7a (GCC 4.9, Qt 5.8.0))
    When executing step "Make"
    16:38:47: Elapsed time: 00:06.
    

    What I have tried so far is in accordance to this link:
    Utilize Avahi Libraries in Android for mDNS Discovering

    configure step:

    ./configure --prefix=/home/staff/Desktop/avahi_compile --sysconfdir=/home/staff/Desktop/avahi_compile/etc --localstatedir=/home/staff/Desktop/avahi_compile/var --disable-static --disable-mono --disable-monodoc  --disable-gdbm --enable-libdaemon --disable-nls --disable-gtk --disable-gtk3 --disable-python --disable-qt3 --disable-qt4 --enable-core-docs --with-distro=none --enable-compat-libdns_sd --build=x86_64-pc-linux-gnu --host=arm-linux-androideabi --target=arm-linux-androideabi CC=/media/qt5-qwt6/ndk10/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc CXX=/media/qt5-qwt6/ndk10/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ LD=/media/qt5-qwt6/ndk10/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-ld
    

    config.log output:

    configure:4056: checking whether the C compiler works
    configure:4078: /media/qt5-qwt6/ndk10/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc    conftest.c  >&5
    /media/qt5-qwt6/ndk10/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_dynamic.o: No such file or directory
    /media/qt5-qwt6/ndk10/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtend_android.o: No such file or directory
    /media/qt5-qwt6/ndk10/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lc
    /media/qt5-qwt6/ndk10/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.9/../../../../arm-linux-androideabi/bin/ld: error: cannot find -ldl
    collect2: error: ld returned 1 exit status
    configure:4082: $? = 1
    configure:4120: result: no
    

    Could anyone explain me the bigger picture here? Where should these files be located?

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi,

      Not really Qt related but from a quick search if found this.

      Hope it helps

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • A Offline
        A Offline
        a_so
        wrote on last edited by
        #3

        Thanks a lot! The error is gone.

        What I did was set environment variables :

        PATH=$PATH:/media/qt5-qwt6/tools25/tools
        PATH=$PATH:/media/qt5-qwt6/tools25/platform-tools
        PATH=$PATH:/media/qt5-qwt6/ndk10/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin
        export LD=arm-linux-androideabi-ld
        export CPP=arm-linux-androideabi-cpp
        export CC=arm-linux-androideabi-gcc
        export CXX=arm-linux-androideabi-g++
        export AS=arm-linux-androideabi-as
        export AR=arm-linux-androideabi-ar
        export RANLIB=arm-linux-androideabi-ranlib
        export ANDROID_SYSROOT=/media/qt5-qwt6/ndk10/android-ndk-r10e/platforms/android-4/arch-arm
        export CPPFLAGS="--sysroot=$ANDROID_SYSROOT"
        export CFLAGS="--sysroot=$ANDROID_SYSROOT"
        export CXXFLAGS="--sysroot=$ANDROID_SYSROOT"
        

        And this is my configure command:

        ./configure --prefix=/home/staff/Desktop/avahi_compile --sysconfdir=/home/staff/Desktop/avahi_compile/etc --localstatedir=/home/staff/Desktop/avahi_compile/var --disable-static --disable-mono --disable-monodoc  --disable-gdbm --enable-libdaemon --disable-nls --disable-gtk --disable-gtk3 --disable-python --disable-qt3 --disable-qt4 --enable-core-docs --with-distro=none --enable-compat-libdns_sd --build=x86_64-pc-linux-gnu --host=arm-linux-androideabi --target=arm-linux-androideabi --with-sysroot=/media/qt5-qwt6/ndk10/android-ndk-r10e/platforms/android-4/arch-arm --with-xml=expat
        
        1 Reply Last reply
        0
        • A Offline
          A Offline
          a_so
          wrote on last edited by
          #4

          Yet now I face the next problem:

          configure: error: *** libexpat requested, but not found ***
          
          

          Expat header, source files and shared libraries are definitely installed on my linux system but it is x86_64 architecture and not arm.
          What I do is try to compile expat 2.2.0 for arm but I was not successful yet.

          This is what I did for expat compiling:

          PATH=$PATH:/media/qt5-qwt6/tools25/tools
          PATH=$PATH:/media/qt5-qwt6/tools25/platform-tools
          PATH=$PATH:/media/qt5-qwt6/ndk10/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin
          export LD=arm-linux-androideabi-ld
          export CPP=arm-linux-androideabi-cpp
          export CC=arm-linux-androideabi-gcc
          export CXX=arm-linux-androideabi-g++
          export AS=arm-linux-androideabi-as
          export AR=arm-linux-androideabi-ar
          export RANLIB=arm-linux-androideabi-ranlib
          export ANDROID_SYSROOT=/media/qt5-qwt6/ndk10/android-ndk-r10e/platforms/android-4/arch-arm
          export CPPFLAGS="--sysroot=$ANDROID_SYSROOT"
          export CFLAGS="--sysroot=$ANDROID_SYSROOT"
          export CXXFLAGS="--sysroot=$ANDROID_SYSROOT"
          

          configure step:

          ./configure --prefix=/home/staff/Desktop/expat_built --enable-shared --build=x86_64-pc-linux-gnu --host=arm-linux-androideabi --with-sysroot=/media/qt5-qwt6/ndk10/android-ndk-r10e/platforms/android-4/arch-arm
          

          My arm-linux-androideabi-gcc compiler from Android NDK works and it says we are cross-compiling.
          But as given in config.log, file ac_nonexistent.h is not found.

          configure:7029: checking how to run the C preprocessor
          configure:7099: result: arm-linux-androideabi-cpp
          configure:7119: arm-linux-androideabi-cpp --sysroot=/media/qt5-qwt6/ndk10/android-ndk-r10e/platforms/android-4/arch-arm conftest.c
          configure:7119: $? = 0
          configure:7133: arm-linux-androideabi-cpp --sysroot=/media/qt5-qwt6/ndk10/android-ndk-r10e/platforms/android-4/arch-arm conftest.c
          conftest.c:9:28: fatal error: ac_nonexistent.h: No such file or directory
           #include <ac_nonexistent.h>
                                      ^
          compilation terminated.
          configure:7133: $? = 1
          configure: failed program was:
          | /* confdefs.h */
          | #define PACKAGE_NAME "expat"
          | #define PACKAGE_TARNAME "expat"
          | #define PACKAGE_VERSION "2.2.0"
          | #define PACKAGE_STRING "expat 2.2.0"
          | #define PACKAGE_BUGREPORT "expat-bugs@libexpat.org"
          | #define PACKAGE_URL ""
          | /* end confdefs.h.  */
          | #include <ac_nonexistent.h>
          

          Where should it be located? Is it another linking problem? Thank you for your help!

          jsulmJ 1 Reply Last reply
          0
          • A a_so

            Yet now I face the next problem:

            configure: error: *** libexpat requested, but not found ***
            
            

            Expat header, source files and shared libraries are definitely installed on my linux system but it is x86_64 architecture and not arm.
            What I do is try to compile expat 2.2.0 for arm but I was not successful yet.

            This is what I did for expat compiling:

            PATH=$PATH:/media/qt5-qwt6/tools25/tools
            PATH=$PATH:/media/qt5-qwt6/tools25/platform-tools
            PATH=$PATH:/media/qt5-qwt6/ndk10/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin
            export LD=arm-linux-androideabi-ld
            export CPP=arm-linux-androideabi-cpp
            export CC=arm-linux-androideabi-gcc
            export CXX=arm-linux-androideabi-g++
            export AS=arm-linux-androideabi-as
            export AR=arm-linux-androideabi-ar
            export RANLIB=arm-linux-androideabi-ranlib
            export ANDROID_SYSROOT=/media/qt5-qwt6/ndk10/android-ndk-r10e/platforms/android-4/arch-arm
            export CPPFLAGS="--sysroot=$ANDROID_SYSROOT"
            export CFLAGS="--sysroot=$ANDROID_SYSROOT"
            export CXXFLAGS="--sysroot=$ANDROID_SYSROOT"
            

            configure step:

            ./configure --prefix=/home/staff/Desktop/expat_built --enable-shared --build=x86_64-pc-linux-gnu --host=arm-linux-androideabi --with-sysroot=/media/qt5-qwt6/ndk10/android-ndk-r10e/platforms/android-4/arch-arm
            

            My arm-linux-androideabi-gcc compiler from Android NDK works and it says we are cross-compiling.
            But as given in config.log, file ac_nonexistent.h is not found.

            configure:7029: checking how to run the C preprocessor
            configure:7099: result: arm-linux-androideabi-cpp
            configure:7119: arm-linux-androideabi-cpp --sysroot=/media/qt5-qwt6/ndk10/android-ndk-r10e/platforms/android-4/arch-arm conftest.c
            configure:7119: $? = 0
            configure:7133: arm-linux-androideabi-cpp --sysroot=/media/qt5-qwt6/ndk10/android-ndk-r10e/platforms/android-4/arch-arm conftest.c
            conftest.c:9:28: fatal error: ac_nonexistent.h: No such file or directory
             #include <ac_nonexistent.h>
                                        ^
            compilation terminated.
            configure:7133: $? = 1
            configure: failed program was:
            | /* confdefs.h */
            | #define PACKAGE_NAME "expat"
            | #define PACKAGE_TARNAME "expat"
            | #define PACKAGE_VERSION "2.2.0"
            | #define PACKAGE_STRING "expat 2.2.0"
            | #define PACKAGE_BUGREPORT "expat-bugs@libexpat.org"
            | #define PACKAGE_URL ""
            | /* end confdefs.h.  */
            | #include <ac_nonexistent.h>
            

            Where should it be located? Is it another linking problem? Thank you for your help!

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #5

            @a_so said in compile avahi to generate shared libraries for Android:

            Expat

            You should ask Expat maintainers/developers.

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            A 1 Reply Last reply
            0
            • jsulmJ jsulm

              @a_so said in compile avahi to generate shared libraries for Android:

              Expat

              You should ask Expat maintainers/developers.

              A Offline
              A Offline
              a_so
              wrote on last edited by
              #6

              @jsulm thank you, I already know what the problem is! The error is supposed to occur due to a test case where header file includes are checked.

              jsulmJ 1 Reply Last reply
              0
              • A a_so

                @jsulm thank you, I already know what the problem is! The error is supposed to occur due to a test case where header file includes are checked.

                jsulmJ Offline
                jsulmJ Offline
                jsulm
                Lifetime Qt Champion
                wrote on last edited by
                #7

                @a_so Yes, it should actually not fail. It is most probably an issue with Expat.

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0

                • Login

                • Login or register to search.
                • First post
                  Last post
                0
                • Categories
                • Recent
                • Tags
                • Popular
                • Users
                • Groups
                • Search
                • Get Qt Extensions
                • Unsolved