Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Back to the past - using "bluez" library directly in QT
Forum Updated to NodeBB v4.3 + New Features

Back to the past - using "bluez" library directly in QT

Scheduled Pinned Locked Moved Unsolved General and Desktop
12 Posts 3 Posters 850 Views 1 Watching
  • 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
    Anonymous_Banned275
    wrote on last edited by
    #1

    I have a project using QT Bluetooth API AFTER I added "Bluetooth" to QT
    QT = core bluetooth widgets.

    Now I am trying to use "blueZ" directly, bypassing QT API and getting "undefined symbols l" .
    ( All the required #include(s) are OK "
    Hence no access to "blueZ"

    Just for drill I did
    sudo apt install bluez

    Which confirms I have bluez installed - so the QT API is OK.

    What else do I have to do to be able to use "blueZ" library direct ?
    ( Linux Ubuntu )

    Christian EhrlicherC 1 Reply Last reply
    0
    • A Anonymous_Banned275

      I have a project using QT Bluetooth API AFTER I added "Bluetooth" to QT
      QT = core bluetooth widgets.

      Now I am trying to use "blueZ" directly, bypassing QT API and getting "undefined symbols l" .
      ( All the required #include(s) are OK "
      Hence no access to "blueZ"

      Just for drill I did
      sudo apt install bluez

      Which confirms I have bluez installed - so the QT API is OK.

      What else do I have to do to be able to use "blueZ" library direct ?
      ( Linux Ubuntu )

      Christian EhrlicherC Offline
      Christian EhrlicherC Offline
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @AnneRanch said in Back to the past - using "bluez" library directly in QT:

      Just for drill I did
      sudo apt install bluez

      As told you many times - if you want to use a library you have to install it's development package -> bluez-dev for example.

      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
      Visit the Qt Academy at https://academy.qt.io/catalog

      A 1 Reply Last reply
      1
      • Christian EhrlicherC Christian Ehrlicher

        @AnneRanch said in Back to the past - using "bluez" library directly in QT:

        Just for drill I did
        sudo apt install bluez

        As told you many times - if you want to use a library you have to install it's development package -> bluez-dev for example.

        A Offline
        A Offline
        Anonymous_Banned275
        wrote on last edited by Anonymous_Banned275
        #3

        @Christian-Ehrlicher Would it be to forward to tell you - please do not respond .
        I really do not need to be treated this childish way .

        BTW I did check
        sudo apt-get install bluez libbluetooth-dev
        Reading package lists... Done
        Building dependency tree... Done
        Reading state information... Done
        bluez is already the newest version (5.60-0ubuntu2.2).
        libbluetooth-dev is already the newest version (5.60-0ubuntu2.2).
        The following package was automatically installed and is no longer required:
        libfwupdplugin1
        Use 'sudo apt autoremove' to remove it.
        0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.

        OK, I know I have a Linux package - now how do I identify the actual bluetoothg.so file so I can use QTCreator to link to it ?

        I assume it would be "system library".

        1 Reply Last reply
        0
        • Christian EhrlicherC Offline
          Christian EhrlicherC Offline
          Christian Ehrlicher
          Lifetime Qt Champion
          wrote on last edited by
          #4

          Since you don't tell us which undefined symbols you have how should we know which library you're using and which you should use?
          You should make sure you only have one bluez library installed and that the bluez headers you use match the bluez library you link to. But that's a normal task for every header and library you're using.

          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
          Visit the Qt Academy at https://academy.qt.io/catalog

          1 Reply Last reply
          0
          • A Offline
            A Offline
            Anonymous_Banned275
            wrote on last edited by
            #5

            @AnneRanch said in Back to the past - using "bluez" library directly in QT:

            how do I identify the actual bluetooth.so file so I can use QTCreator to link to it ?

            I can use QtCreator to link to it , but I do not know WHERE it is nor what is the actual name ,

            Christian EhrlicherC 1 Reply Last reply
            0
            • A Anonymous_Banned275

              @AnneRanch said in Back to the past - using "bluez" library directly in QT:

              how do I identify the actual bluetooth.so file so I can use QTCreator to link to it ?

              I can use QtCreator to link to it , but I do not know WHERE it is nor what is the actual name ,

              Christian EhrlicherC Offline
              Christian EhrlicherC Offline
              Christian Ehrlicher
              Lifetime Qt Champion
              wrote on last edited by
              #6

              @AnneRanch said in Back to the past - using "bluez" library directly in QT:

              I can use QtCreator to link to it

              QtCreator is an IDE, not a linker

              but I do not know WHERE it is nor what is the actual name ,

              When you link against 'bluetooth' the library must be named 'libbluetooth.so' (this schema is true for all unix libraries btw). If you don't install it by yourself it's for sure in /usr/lib or /usr/lib64 depending on your architecture.

              Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
              Visit the Qt Academy at https://academy.qt.io/catalog

              A 1 Reply Last reply
              1
              • Christian EhrlicherC Christian Ehrlicher

                @AnneRanch said in Back to the past - using "bluez" library directly in QT:

                I can use QtCreator to link to it

                QtCreator is an IDE, not a linker

                but I do not know WHERE it is nor what is the actual name ,

                When you link against 'bluetooth' the library must be named 'libbluetooth.so' (this schema is true for all unix libraries btw). If you don't install it by yourself it's for sure in /usr/lib or /usr/lib64 depending on your architecture.

                A Offline
                A Offline
                Anonymous_Banned275
                wrote on last edited by
                #7

                @Christian-Ehrlicher said in Back to the past - using "bluez" library directly in QT:

                'libbluetooth.so'

                find -name "blue.so"

                Finds no libbluetooth.so .

                What is my next step to solve this ?

                (And why does QT bluetooth API works ? )

                PS

                QtCreator is an IDE, not a linker

                I really do not care for this irrelevant remark - you may as well call it "banana".,

                ... and why you need to know WHAT is failing if I am asking how to link to "blueZ' library?

                Christian EhrlicherC 1 Reply Last reply
                0
                • A Anonymous_Banned275

                  @Christian-Ehrlicher said in Back to the past - using "bluez" library directly in QT:

                  'libbluetooth.so'

                  find -name "blue.so"

                  Finds no libbluetooth.so .

                  What is my next step to solve this ?

                  (And why does QT bluetooth API works ? )

                  PS

                  QtCreator is an IDE, not a linker

                  I really do not care for this irrelevant remark - you may as well call it "banana".,

                  ... and why you need to know WHAT is failing if I am asking how to link to "blueZ' library?

                  Christian EhrlicherC Offline
                  Christian EhrlicherC Offline
                  Christian Ehrlicher
                  Lifetime Qt Champion
                  wrote on last edited by
                  #8

                  @AnneRanch said in Back to the past - using "bluez" library directly in QT:

                  find -name "blue.so"
                  Finds no libbluetooth.so .

                  It would be rather surprising if it did ... :D

                  QtCreator is an IDE, not a linker

                  I really do not care for this irrelevant remark - you may as well call it "banana".,

                  It's not irrelevant - it's important to understand what's going wrong. But I know you don't care why something is going wrong.

                  Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                  Visit the Qt Academy at https://academy.qt.io/catalog

                  1 Reply Last reply
                  3
                  • A Offline
                    A Offline
                    Anonymous_Banned275
                    wrote on last edited by
                    #9

                    I have used QT (IDE if you insist ) and added "package library " "bluez".
                    however, i AM STILL GETTING RUN TIME ERRORS - MISSING
                    hci_get_route

                    BUT

                    hci_open_dev passes OK.

                    So it seems to be a "blueZ" issue now .

                    What I do not understand -
                    why this error does no show during compile or linking ?
                    ( Perhaps because QT is IDE ?)

                    or because the project is a library ?

                    d4af0c15-bda7-4c5b-9fd7-efcc454f5b59-image.png My compiler is noi hapoopy , but it allways was,

                    1 Reply Last reply
                    0
                    • C Offline
                      C Offline
                      ChrisW67
                      wrote on last edited by
                      #10

                      @AnneRanch said in Back to the past - using "bluez" library directly in QT:

                      Your screen shot does not not show an error, it is a warning. This is your compiler trying to protect you from common mistakes.
                      It is telling you that dev_id is used before it has had any value set. In your case this is because you have commented out the line (95) that sets dev_id's value and dev_id is not set previous to that.

                      however, i AM STILL GETTING RUN TIME ERRORS - MISSING
                      hci_get_route

                      Absent the actual error message, my best guess is that:
                      This is not a compilation error. Your code compiles with warnings.
                      This is a linker error. Your code fails to link because it finds no library containing a function "hci_get_route"
                      This is not a run time error: you have to have a linked executable to be able to run anything.

                      The linker cannot file the bluez library because it is either:

                      • Not listed as a library to link on the linker command line. This would be the '-l' (lower case L) option for the GNU tools on Linux (e.g. -lbluetooth).
                      • The named library does not appear in the default locations or in a location passed to the linker on its command line. These would be the '-L' options. There may be none of these for a typical install of a system packaged library.

                      If the result of locate libbluetooth.so is empty then the library is not present at all.

                      Both of these options to the linker are driven by the LIBS variable in your qmake project file. We cannot see what you have here so your next course of action is to:

                      • Copy and paste the entire text surrounding the linker error including the command (ld ...) make executed. You can see the in the compiler output tab if you are using Qt Creator. Do not paraphrase it. Do not only post the error message.
                      • Post the entire text of the INCLUDEPATH and LIBS variables in the your qmake project file.
                      A 1 Reply Last reply
                      3
                      • C ChrisW67

                        @AnneRanch said in Back to the past - using "bluez" library directly in QT:

                        Your screen shot does not not show an error, it is a warning. This is your compiler trying to protect you from common mistakes.
                        It is telling you that dev_id is used before it has had any value set. In your case this is because you have commented out the line (95) that sets dev_id's value and dev_id is not set previous to that.

                        however, i AM STILL GETTING RUN TIME ERRORS - MISSING
                        hci_get_route

                        Absent the actual error message, my best guess is that:
                        This is not a compilation error. Your code compiles with warnings.
                        This is a linker error. Your code fails to link because it finds no library containing a function "hci_get_route"
                        This is not a run time error: you have to have a linked executable to be able to run anything.

                        The linker cannot file the bluez library because it is either:

                        • Not listed as a library to link on the linker command line. This would be the '-l' (lower case L) option for the GNU tools on Linux (e.g. -lbluetooth).
                        • The named library does not appear in the default locations or in a location passed to the linker on its command line. These would be the '-L' options. There may be none of these for a typical install of a system packaged library.

                        If the result of locate libbluetooth.so is empty then the library is not present at all.

                        Both of these options to the linker are driven by the LIBS variable in your qmake project file. We cannot see what you have here so your next course of action is to:

                        • Copy and paste the entire text surrounding the linker error including the command (ld ...) make executed. You can see the in the compiler output tab if you are using Qt Creator. Do not paraphrase it. Do not only post the error message.
                        • Post the entire text of the INCLUDEPATH and LIBS variables in the your qmake project file.
                        A Offline
                        A Offline
                        Anonymous_Banned275
                        wrote on last edited by
                        #11

                        @ChrisW67 Part of the problem is solved. Would you be willing to further discuss this post FOR LEARNING purpose only ?
                        I am willing, but will not waste my time with "I told you so " attitude and explanations on how the world was created .

                        "just the facts ma'am..."

                        1 Reply Last reply
                        0
                        • C Offline
                          C Offline
                          ChrisW67
                          wrote on last edited by
                          #12

                          People in the thread have been trying to discuss some facts and help with education.

                          Here is some further education.

                          The <bluetooth/bluetooth.h> includes, and the corresponding library link, libbluetooth.so, for Linux Bluetooth development are part of the Ubuntu libbluetooth-dev package.

                          A very simple example program is (basic C code from here):

                          #include <QCoreApplication>
                          
                          #include <stdio.h>
                          #include <stdlib.h>
                          #include <unistd.h>
                          #include <sys/socket.h>
                          #include <bluetooth/bluetooth.h>
                          #include <bluetooth/hci.h>
                          #include <bluetooth/hci_lib.h>
                          
                          int main(int argc, char **argv)
                          {
                              QCoreApplication app(argc, argv);
                          
                              inquiry_info *ii = NULL;
                              int max_rsp, num_rsp;
                              int dev_id, sock, len, flags;
                              int i;
                              char addr[19] = { 0 };
                              char name[248] = { 0 };
                          
                              dev_id = hci_get_route(NULL);
                              sock = hci_open_dev( dev_id );
                              if (dev_id < 0 || sock < 0) {
                                  perror("opening socket");
                                  exit(1);
                              }
                          
                              len  = 8;
                              max_rsp = 255;
                              flags = IREQ_CACHE_FLUSH;
                              ii = (inquiry_info*)malloc(max_rsp * sizeof(inquiry_info));
                              
                              num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags);
                              if( num_rsp < 0 ) perror("hci_inquiry");
                          
                              for (i = 0; i < num_rsp; i++) {
                                  ba2str(&(ii+i)->bdaddr, addr);
                                  memset(name, 0, sizeof(name));
                                  if (hci_read_remote_name(sock, &(ii+i)->bdaddr, sizeof(name), 
                                      name, 0) < 0)
                                  strcpy(name, "[unknown]");
                                  printf("%s  %s\n", addr, name);
                              }
                          
                              free( ii );
                              close( sock );
                              return 0;
                          }
                          

                          and a minimal Qt project file (test.pro) that will compile and link it:

                          TEMPLATE = app
                          TARGET = test
                          INCLUDEPATH += .
                          SOURCES += main.cpp
                          LIBS += -lbluetooth
                          

                          The libbluetooth-dev package puts everything in standard paths so:

                          • No need to add search locations to INCLUDEPATH so the compiler can find the header files
                          • No need to add search locations to LIBS with -L options

                          The only thing required to link is the name of a library to connect with the application, in this case the bluetooth library identified in the LIBS variable -lbluetooth.

                          For libraries in Linux there is often a pkg-config file that can be queried (it is confusingly named in this case):

                          # Things you may need to add the INCLUDEPATH or CFLAGS (for the compiler)
                          $ pkg-config  --cflags bluez
                          
                          # Things you need to consider for LIBS (for the linker)
                          $ pkg-config  --libs bluez
                          -lbluetooth
                          

                          You can even ask Qt to use pkg-config directly to set INCLUDEPATH and LIBS internally:

                          TEMPLATE = app
                          TARGET = test
                          INCLUDEPATH += .
                          SOURCES += main.cpp
                          CONFIG += link_pkgconfig
                          PKGCONFIG += bluez
                          
                          1 Reply Last reply
                          3

                          • Login

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