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. How to compile a so file in order to load it as a library.

How to compile a so file in order to load it as a library.

Scheduled Pinned Locked Moved Unsolved General and Desktop
28 Posts 3 Posters 10.0k 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.
  • J jenya7

    I want to load a Qt library in Python

    from ctypes import *
      
    libc = CDLL("mylib.so")
    

    So first I create a library

    g++ -fPIC -shared -o mylib.so mylib.o
    

    But when I load I get
    mylib.so: undefined symbol: _ZTI9QRunnable

    I aaded Q_DECL_EXPORT to my class

    class Q_DECL_EXPORT SENSOR : public QObject
    {
    Q_OBJECT

    public:
    SENSOR(QObject *parent = nullptr);
    
    //and so on.....
    

    }

    But no so file was created.

    So how can compile a *.so file recursively to include all related objects?

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

    @jenya7 said in How to compile a so file in order to load it as a library.:

    But no so file was created.

    So, then the compiler/linker failed, right? What about posting errors? Or did you only rerun "g++ -fPIC -shared -o mylib.so mylib.o
    " - you of course have to rebuild mylib.o

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

    J 1 Reply Last reply
    0
    • jsulmJ jsulm

      @jenya7 said in How to compile a so file in order to load it as a library.:

      But no so file was created.

      So, then the compiler/linker failed, right? What about posting errors? Or did you only rerun "g++ -fPIC -shared -o mylib.so mylib.o
      " - you of course have to rebuild mylib.o

      J Offline
      J Offline
      jenya7
      wrote on last edited by
      #3

      @jsulm said in How to compile a so file in order to load it as a library.:

      @jenya7 said in How to compile a so file in order to load it as a library.:

      But no so file was created.

      So, then the compiler/linker failed, right? What about posting errors? Or did you only rerun "g++ -fPIC -shared -o mylib.so mylib.o
      " - you of course have to rebuild mylib.o

      No failure. It compiled OK but no so file was created.

      jsulmJ 1 Reply Last reply
      0
      • J jenya7

        @jsulm said in How to compile a so file in order to load it as a library.:

        @jenya7 said in How to compile a so file in order to load it as a library.:

        But no so file was created.

        So, then the compiler/linker failed, right? What about posting errors? Or did you only rerun "g++ -fPIC -shared -o mylib.so mylib.o
        " - you of course have to rebuild mylib.o

        No failure. It compiled OK but no so file was created.

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

        @jenya7 said in How to compile a so file in order to load it as a library.:

        It compiled OK but no so file was created

        Then it did NOT compiled OK!
        Did you rebuild mylib.o as I wrote?

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

        J 1 Reply Last reply
        0
        • jsulmJ jsulm

          @jenya7 said in How to compile a so file in order to load it as a library.:

          It compiled OK but no so file was created

          Then it did NOT compiled OK!
          Did you rebuild mylib.o as I wrote?

          J Offline
          J Offline
          jenya7
          wrote on last edited by
          #5

          @jsulm said in How to compile a so file in order to load it as a library.:

          @jenya7 said in How to compile a so file in order to load it as a library.:

          It compiled OK but no so file was created

          Then it did NOT compiled OK!
          Did you rebuild mylib.o as I wrote?

          OK. To make sure I delete the object file, compile (rebuild with Q_DECL_EXPORT option).
          Then I do again
          g++ -fPIC -shared -o mylib.so mylib.o
          And see a new so file. However the same problem exists - mylib.so: undefined symbol: _ZTI9QRunnable

          jsulmJ 1 Reply Last reply
          0
          • J jenya7

            @jsulm said in How to compile a so file in order to load it as a library.:

            @jenya7 said in How to compile a so file in order to load it as a library.:

            It compiled OK but no so file was created

            Then it did NOT compiled OK!
            Did you rebuild mylib.o as I wrote?

            OK. To make sure I delete the object file, compile (rebuild with Q_DECL_EXPORT option).
            Then I do again
            g++ -fPIC -shared -o mylib.so mylib.o
            And see a new so file. However the same problem exists - mylib.so: undefined symbol: _ZTI9QRunnable

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

            @jenya7 said in How to compile a so file in order to load it as a library.:

            QRunnable

            QRunnable is part of QtCore Qt module, so your lib needs to link against QtCore.

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

            J 1 Reply Last reply
            0
            • jsulmJ jsulm

              @jenya7 said in How to compile a so file in order to load it as a library.:

              QRunnable

              QRunnable is part of QtCore Qt module, so your lib needs to link against QtCore.

              J Offline
              J Offline
              jenya7
              wrote on last edited by
              #7

              @jsulm said in How to compile a so file in order to load it as a library.:

              @jenya7 said in How to compile a so file in order to load it as a library.:

              QRunnable

              QRunnable is part of QtCore Qt module, so your lib needs to link against QtCore.

              That is my question - how to compile recursively to include all related objects?

              jsulmJ 1 Reply Last reply
              0
              • J jenya7

                @jsulm said in How to compile a so file in order to load it as a library.:

                @jenya7 said in How to compile a so file in order to load it as a library.:

                QRunnable

                QRunnable is part of QtCore Qt module, so your lib needs to link against QtCore.

                That is my question - how to compile recursively to include all related objects?

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

                @jenya7 said in How to compile a so file in order to load it as a library.:

                how to compile recursively to include all related objects?

                You do not compile recursevly, you link against libraries you depend on. Something like:

                g++ -fPIC -shared -o mylib.so mylib.o -LPATH_TO_QT_LIB_FOLDER -lqtcore
                

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

                J 1 Reply Last reply
                2
                • jsulmJ jsulm

                  @jenya7 said in How to compile a so file in order to load it as a library.:

                  how to compile recursively to include all related objects?

                  You do not compile recursevly, you link against libraries you depend on. Something like:

                  g++ -fPIC -shared -o mylib.so mylib.o -LPATH_TO_QT_LIB_FOLDER -lqtcore
                  
                  J Offline
                  J Offline
                  jenya7
                  wrote on last edited by jenya7
                  #9

                  @jsulm said in How to compile a so file in order to load it as a library.:

                  @jenya7 said in How to compile a so file in order to load it as a library.:

                  how to compile recursively to include all related objects?

                  You do not compile recursevly, you link against libraries you depend on. Something like:

                  g++ -fPIC -shared -o mylib.so mylib.o -LPATH_TO_QT_LIB_FOLDER -lqtcore
                  

                  Too much to include I have in the source file
                  #include <QObject>
                  #include <QTime>
                  #include <QtConcurrent/QtConcurrent>
                  #include <QThread>
                  #include <QElapsedTimer>
                  #include <QApplication>

                  It in its turn has its own dependencies. Is it doable at all?

                  jsulmJ 1 Reply Last reply
                  0
                  • J jenya7

                    @jsulm said in How to compile a so file in order to load it as a library.:

                    @jenya7 said in How to compile a so file in order to load it as a library.:

                    how to compile recursively to include all related objects?

                    You do not compile recursevly, you link against libraries you depend on. Something like:

                    g++ -fPIC -shared -o mylib.so mylib.o -LPATH_TO_QT_LIB_FOLDER -lqtcore
                    

                    Too much to include I have in the source file
                    #include <QObject>
                    #include <QTime>
                    #include <QtConcurrent/QtConcurrent>
                    #include <QThread>
                    #include <QElapsedTimer>
                    #include <QApplication>

                    It in its turn has its own dependencies. Is it doable at all?

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

                    @jenya7 said in How to compile a so file in order to load it as a library.:

                    Is it doable at all?

                    What is doable?
                    As I wrote: if you use a library then you have to link against that library...

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

                    J 1 Reply Last reply
                    0
                    • jsulmJ jsulm

                      @jenya7 said in How to compile a so file in order to load it as a library.:

                      Is it doable at all?

                      What is doable?
                      As I wrote: if you use a library then you have to link against that library...

                      J Offline
                      J Offline
                      jenya7
                      wrote on last edited by jenya7
                      #11

                      @jsulm said in How to compile a so file in order to load it as a library.:

                      @jenya7 said in How to compile a so file in order to load it as a library.:

                      Is it doable at all?

                      What is doable?
                      As I wrote: if you use a library then you have to link against that library...

                      I see. Where is LPATH_TO_QT_LIB_FOLDER located on Linux?
                      I can no t find -lqtcore library.

                      jsulmJ 1 Reply Last reply
                      0
                      • J jenya7

                        @jsulm said in How to compile a so file in order to load it as a library.:

                        @jenya7 said in How to compile a so file in order to load it as a library.:

                        Is it doable at all?

                        What is doable?
                        As I wrote: if you use a library then you have to link against that library...

                        I see. Where is LPATH_TO_QT_LIB_FOLDER located on Linux?
                        I can no t find -lqtcore library.

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

                        @jenya7 said in How to compile a so file in order to load it as a library.:

                        PATH_TO_QT_LIB_FOLDER

                        This was apparently just a placeholder for the real path. It needs to be the folder where libqtcore.so file is located.
                        See https://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html for example.

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

                        J 1 Reply Last reply
                        0
                        • jsulmJ jsulm

                          @jenya7 said in How to compile a so file in order to load it as a library.:

                          PATH_TO_QT_LIB_FOLDER

                          This was apparently just a placeholder for the real path. It needs to be the folder where libqtcore.so file is located.
                          See https://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html for example.

                          J Offline
                          J Offline
                          jenya7
                          wrote on last edited by jenya7
                          #13

                          @jsulm said in How to compile a so file in order to load it as a library.:

                          @jenya7 said in How to compile a so file in order to load it as a library.:

                          PATH_TO_QT_LIB_FOLDER

                          This was apparently just a placeholder for the real path. It needs to be the folder where libqtcore.so file is located.
                          See https://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html for example.

                          I did a search in all folders
                          find / libqtcore.so
                          no such file reported.
                          What I've managed to find is
                          /usr/lib/arm-linux-gnueabihf/libQt5Core.so.5
                          and it's a shortcut file which I can not open.

                          jsulmJ 1 Reply Last reply
                          0
                          • J jenya7

                            @jsulm said in How to compile a so file in order to load it as a library.:

                            @jenya7 said in How to compile a so file in order to load it as a library.:

                            PATH_TO_QT_LIB_FOLDER

                            This was apparently just a placeholder for the real path. It needs to be the folder where libqtcore.so file is located.
                            See https://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html for example.

                            I did a search in all folders
                            find / libqtcore.so
                            no such file reported.
                            What I've managed to find is
                            /usr/lib/arm-linux-gnueabihf/libQt5Core.so.5
                            and it's a shortcut file which I can not open.

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

                            @jenya7 said in How to compile a so file in order to load it as a library.:

                            and it's a shortcut file which I can not open

                            Why do you want to open it?
                            Did you try:

                            g++ -fPIC -shared -o mylib.so mylib.o -L/usr/lib/arm-linux-gnueabihf -lQt5Core
                            

                            ?
                            Are you on ARM platform or are you doing cross compilation?

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

                            J 1 Reply Last reply
                            0
                            • jsulmJ jsulm

                              @jenya7 said in How to compile a so file in order to load it as a library.:

                              and it's a shortcut file which I can not open

                              Why do you want to open it?
                              Did you try:

                              g++ -fPIC -shared -o mylib.so mylib.o -L/usr/lib/arm-linux-gnueabihf -lQt5Core
                              

                              ?
                              Are you on ARM platform or are you doing cross compilation?

                              J Offline
                              J Offline
                              jenya7
                              wrote on last edited by
                              #15

                              @jsulm said in How to compile a so file in order to load it as a library.:

                              @jenya7 said in How to compile a so file in order to load it as a library.:

                              and it's a shortcut file which I can not open

                              Why do you want to open it?
                              Did you try:

                              g++ -fPIC -shared -o mylib.so mylib.o -L/usr/lib/arm-linux-gnueabihf -lQt5Core
                              

                              ?
                              Are you on ARM platform or are you doing cross compilation?

                              It's Raspberry Pi - Debian. Qt installed on board and I build directly on board.

                              jsulmJ 1 Reply Last reply
                              0
                              • J jenya7

                                @jsulm said in How to compile a so file in order to load it as a library.:

                                @jenya7 said in How to compile a so file in order to load it as a library.:

                                and it's a shortcut file which I can not open

                                Why do you want to open it?
                                Did you try:

                                g++ -fPIC -shared -o mylib.so mylib.o -L/usr/lib/arm-linux-gnueabihf -lQt5Core
                                

                                ?
                                Are you on ARM platform or are you doing cross compilation?

                                It's Raspberry Pi - Debian. Qt installed on board and I build directly on board.

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

                                @jenya7 Then -lQt5Core should be enough, no need for -L

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

                                J 1 Reply Last reply
                                0
                                • jsulmJ jsulm

                                  @jenya7 Then -lQt5Core should be enough, no need for -L

                                  J Offline
                                  J Offline
                                  jenya7
                                  wrote on last edited by
                                  #17

                                  @jsulm said in How to compile a so file in order to load it as a library.:

                                  @jenya7 Then -lQt5Core should be enough, no need for -L

                                  Thank you.
                                  g++ -fPIC -shared -o mylib.so mylib.o -L/usr/lib/arm-linux-gnueabihf -lQt5Core
                                  It works. Now it's quit a nightmare - it's like a chain reaction - demands more and more dependencies. I include each time, hope it'll come till the end eventually. My command line string takes the full screen already.

                                  jsulmJ 1 Reply Last reply
                                  0
                                  • J jenya7

                                    @jsulm said in How to compile a so file in order to load it as a library.:

                                    @jenya7 Then -lQt5Core should be enough, no need for -L

                                    Thank you.
                                    g++ -fPIC -shared -o mylib.so mylib.o -L/usr/lib/arm-linux-gnueabihf -lQt5Core
                                    It works. Now it's quit a nightmare - it's like a chain reaction - demands more and more dependencies. I include each time, hope it'll come till the end eventually. My command line string takes the full screen already.

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

                                    @jenya7 You should use a proper build system like QMake or CMake instead of hacking around with all these manually...

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

                                    J 1 Reply Last reply
                                    0
                                    • jsulmJ jsulm

                                      @jenya7 You should use a proper build system like QMake or CMake instead of hacking around with all these manually...

                                      J Offline
                                      J Offline
                                      jenya7
                                      wrote on last edited by
                                      #19

                                      @jsulm
                                      One dependence I can't resolve - undefined symbol: _ZN7QAction16staticMetaObjectE
                                      Where could it be - QAction - is it a separate library?

                                      jsulmJ 1 Reply Last reply
                                      0
                                      • J jenya7

                                        @jsulm
                                        One dependence I can't resolve - undefined symbol: _ZN7QAction16staticMetaObjectE
                                        Where could it be - QAction - is it a separate library?

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

                                        @jenya7 If you go to https://doc.qt.io/qt-6/qaction.html you will see what Qt module it is (hint: qmake: QT += gui)

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

                                        J 1 Reply Last reply
                                        1
                                        • jsulmJ jsulm

                                          @jenya7 If you go to https://doc.qt.io/qt-6/qaction.html you will see what Qt module it is (hint: qmake: QT += gui)

                                          J Offline
                                          J Offline
                                          jenya7
                                          wrote on last edited by
                                          #21

                                          @jsulm said in How to compile a so file in order to load it as a library.:

                                          @jenya7 If you go to https://doc.qt.io/qt-6/qaction.html you will see what Qt module it is (hint: qmake: QT += gui)

                                          sorry to bother but I included
                                          -L/usr/lib/arm-linux-gnueabihf/ -lQt5Gui
                                          and QAction is good now but I get
                                          undefined symbol: _ZN12QActionGroup16staticMetaObjectE
                                          but I see QAction and QActionGroup in the same library (QT += gui)
                                          Do I miss some lib?

                                          JonBJ jsulmJ 2 Replies 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