Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. 3rd Party Software
  4. undefined reference - Help first time external header library QT C++ [Linux]
Forum Updated to NodeBB v4.3 + New Features

undefined reference - Help first time external header library QT C++ [Linux]

Scheduled Pinned Locked Moved Unsolved 3rd Party Software
c++libraryreference error
14 Posts 3 Posters 2.5k 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #3

    Hi,

    Aren't you forgetting to link to the library that provided these symbols ?

    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
    1
    • LudoFRL Offline
      LudoFRL Offline
      LudoFR
      wrote on last edited by LudoFR
      #4

      @JonB said in undefined reference - Help first time external header library QT C++ [Linux]:

      @LudoFR
      Does it help if you write it as ::DapiOpenModuleEx(...)?
      As @SGaist says below. I didn't notice it was a linker error.

      @SGaist said in undefined reference - Help first time external header library QT C++ [Linux]:

      Hi,

      Aren't you forgetting to link to the library that provided these symbols ?

      damn yea right..

      I have the added full library folder into my project folder like this :
      d47c753b-bda1-4dd9-8fec-a4ce92fb5ba1-image.png

      Now my *.pro file :

      QT += quick
      
      SOURCES += \
              main.cpp
      
      resources.files = main.qml 
      resources.prefix = /$${TARGET}
      RESOURCES += resources
      
      # Additional import path used to resolve QML modules in Qt Creator's code model
      QML_IMPORT_PATH =
      
      # Additional import path used to resolve QML modules just for Qt Quick Designer
      QML_DESIGNER_IMPORT_PATH =
      
      # Default rules for deployment.
      qnx: target.path = /tmp/$${TARGET}/bin
      else: unix:!android: target.path = /opt/$${TARGET}/bin
      !isEmpty(target.path): INSTALLS += target
      &
      
      unix:!macx: LIBS += -L$$PWD/delib/lib/build_x64/ -lDelibTcp
      
      INCLUDEPATH += $$PWD/delib
      DEPENDPATH += $$PWD/delib
      

      and my compile ouput window :

      08:54:36: Running steps for project DeditecQuickCpp...
      08:54:36: Configuration unchanged, skipping qmake step.
      08:54:36: Starting: "/usr/bin/make" -j20
      g++ -c -pipe -g -Wall -Wextra -fPIC -D_REENTRANT -DQT_QML_DEBUG -DQT_QUICK_LIB -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_QMLINTEGRATION_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I../DeditecQuickCpp -I. -I../DeditecQuickCpp/delib -I../../../../Qt/6.4.2/gcc_64/include -I../../../../Qt/6.4.2/gcc_64/include/QtQuick -I../../../../Qt/6.4.2/gcc_64/include/QtOpenGL -I../../../../Qt/6.4.2/gcc_64/include/QtGui -I../../../../Qt/6.4.2/gcc_64/include/QtQmlModels -I../../../../Qt/6.4.2/gcc_64/include/QtQml -I../../../../Qt/6.4.2/gcc_64/include/QtQmlIntegration -I../../../../Qt/6.4.2/gcc_64/include/QtNetwork -I../../../../Qt/6.4.2/gcc_64/include/QtCore -I. -I../../../../Qt/6.4.2/gcc_64/mkspecs/linux-g++ -o main.o ../DeditecQuickCpp/main.cpp
      In file included from ../DeditecQuickCpp/main.cpp:5:
      ../DeditecQuickCpp/delib/library/delib/delib.h:347:53: note: ‘#pragma message: DELIB.H Mode for C++ used’
        347 |         #pragma message ("DELIB.H Mode for C++ used")
            |                                                     ^
      g++ -Wl,-rpath,/home/ludo/Qt/6.4.2/gcc_64/lib -Wl,-rpath-link,/home/ludo/Qt/6.4.2/gcc_64/lib -o DeditecQuickCpp  main.o qrc_qmake_resources.o   -L/home/ludo/Documents/Dev_C/QT/DeditecQuickCpp/delib/lib/build_x64/ -lDelibTcp /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Quick.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6OpenGL.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Gui.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6QmlModels.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Qml.so -pthread /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Network.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Core.so -lpthread -lGL   
      /usr/bin/ld: main.o: in function `main':
      /home/ludo/Documents/Dev_C/QT/build-DeditecQuickCpp-Desktop_Qt_6_4_2_GCC_64bit-Debug/../DeditecQuickCpp/main.cpp:23: undefined reference to `DapiOpenModuleEx'
      collect2: error: ld returned 1 exit status
      make: *** [Makefile:211: DeditecQuickCpp] Error 1
      08:54:37: The process "/usr/bin/make" exited with code 2.
      Error while building/deploying project DeditecQuickCpp (kit: Desktop Qt 6.4.2 GCC 64bit)
      When executing step "Make"
      08:54:37: Elapsed time: 00:01.
      
      JonBJ 1 Reply Last reply
      0
      • LudoFRL LudoFR

        @JonB said in undefined reference - Help first time external header library QT C++ [Linux]:

        @LudoFR
        Does it help if you write it as ::DapiOpenModuleEx(...)?
        As @SGaist says below. I didn't notice it was a linker error.

        @SGaist said in undefined reference - Help first time external header library QT C++ [Linux]:

        Hi,

        Aren't you forgetting to link to the library that provided these symbols ?

        damn yea right..

        I have the added full library folder into my project folder like this :
        d47c753b-bda1-4dd9-8fec-a4ce92fb5ba1-image.png

        Now my *.pro file :

        QT += quick
        
        SOURCES += \
                main.cpp
        
        resources.files = main.qml 
        resources.prefix = /$${TARGET}
        RESOURCES += resources
        
        # Additional import path used to resolve QML modules in Qt Creator's code model
        QML_IMPORT_PATH =
        
        # Additional import path used to resolve QML modules just for Qt Quick Designer
        QML_DESIGNER_IMPORT_PATH =
        
        # Default rules for deployment.
        qnx: target.path = /tmp/$${TARGET}/bin
        else: unix:!android: target.path = /opt/$${TARGET}/bin
        !isEmpty(target.path): INSTALLS += target
        &
        
        unix:!macx: LIBS += -L$$PWD/delib/lib/build_x64/ -lDelibTcp
        
        INCLUDEPATH += $$PWD/delib
        DEPENDPATH += $$PWD/delib
        

        and my compile ouput window :

        08:54:36: Running steps for project DeditecQuickCpp...
        08:54:36: Configuration unchanged, skipping qmake step.
        08:54:36: Starting: "/usr/bin/make" -j20
        g++ -c -pipe -g -Wall -Wextra -fPIC -D_REENTRANT -DQT_QML_DEBUG -DQT_QUICK_LIB -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_QMLINTEGRATION_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I../DeditecQuickCpp -I. -I../DeditecQuickCpp/delib -I../../../../Qt/6.4.2/gcc_64/include -I../../../../Qt/6.4.2/gcc_64/include/QtQuick -I../../../../Qt/6.4.2/gcc_64/include/QtOpenGL -I../../../../Qt/6.4.2/gcc_64/include/QtGui -I../../../../Qt/6.4.2/gcc_64/include/QtQmlModels -I../../../../Qt/6.4.2/gcc_64/include/QtQml -I../../../../Qt/6.4.2/gcc_64/include/QtQmlIntegration -I../../../../Qt/6.4.2/gcc_64/include/QtNetwork -I../../../../Qt/6.4.2/gcc_64/include/QtCore -I. -I../../../../Qt/6.4.2/gcc_64/mkspecs/linux-g++ -o main.o ../DeditecQuickCpp/main.cpp
        In file included from ../DeditecQuickCpp/main.cpp:5:
        ../DeditecQuickCpp/delib/library/delib/delib.h:347:53: note: ‘#pragma message: DELIB.H Mode for C++ used’
          347 |         #pragma message ("DELIB.H Mode for C++ used")
              |                                                     ^
        g++ -Wl,-rpath,/home/ludo/Qt/6.4.2/gcc_64/lib -Wl,-rpath-link,/home/ludo/Qt/6.4.2/gcc_64/lib -o DeditecQuickCpp  main.o qrc_qmake_resources.o   -L/home/ludo/Documents/Dev_C/QT/DeditecQuickCpp/delib/lib/build_x64/ -lDelibTcp /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Quick.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6OpenGL.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Gui.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6QmlModels.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Qml.so -pthread /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Network.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Core.so -lpthread -lGL   
        /usr/bin/ld: main.o: in function `main':
        /home/ludo/Documents/Dev_C/QT/build-DeditecQuickCpp-Desktop_Qt_6_4_2_GCC_64bit-Debug/../DeditecQuickCpp/main.cpp:23: undefined reference to `DapiOpenModuleEx'
        collect2: error: ld returned 1 exit status
        make: *** [Makefile:211: DeditecQuickCpp] Error 1
        08:54:37: The process "/usr/bin/make" exited with code 2.
        Error while building/deploying project DeditecQuickCpp (kit: Desktop Qt 6.4.2 GCC 64bit)
        When executing step "Make"
        08:54:37: Elapsed time: 00:01.
        
        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by
        #5

        @LudoFR
        What files are in /home/ludo/Documents/Dev_C/QT/DeditecQuickCpp/delib/lib/build_x64/? How were the libraries there built, and who built them?

        LudoFRL 1 Reply Last reply
        0
        • JonBJ JonB

          @LudoFR
          What files are in /home/ludo/Documents/Dev_C/QT/DeditecQuickCpp/delib/lib/build_x64/? How were the libraries there built, and who built them?

          LudoFRL Offline
          LudoFRL Offline
          LudoFR
          wrote on last edited by LudoFR
          #6

          @JonB

          Here the script for compiling the *.so library :

          #!/bin/bash
          
          flags="-Wall -Werror"
          lib_name=./build_x64/libDelibTcp
          
          list_of_source_files="
          blowfish.c
          deditec_encryption_utils.c
          delib_io_tcp_encryption.c
          -g"
           
          list_of_object_files="
          blowfish.o
          deditec_encryption_utils.o
          delib_io_tcp_encryption.o
          -g"
           
          echo now compiling $lib_name
          gcc -c $flags -fpic $list_of_source_files
          
          if [ $? != "0" ]
             then echo
                  echo "error(s) found while compiling"
                  exit 100
             else echo
                  gcc -shared -o $lib_name.so $list_of_object_files
          		rm *.o
          		echo "lib created"
          fi
          

          Following the documentation

          Here the files used for compilation.
          1fe55a9e-c0ac-49b1-9057-f1a51e63364e-image.png

          Sorry I'm kind of beginner with Linux and C++ globally (too much time on windows and C# sadly for me)

          JonBJ 1 Reply Last reply
          0
          • LudoFRL LudoFR

            @JonB

            Here the script for compiling the *.so library :

            #!/bin/bash
            
            flags="-Wall -Werror"
            lib_name=./build_x64/libDelibTcp
            
            list_of_source_files="
            blowfish.c
            deditec_encryption_utils.c
            delib_io_tcp_encryption.c
            -g"
             
            list_of_object_files="
            blowfish.o
            deditec_encryption_utils.o
            delib_io_tcp_encryption.o
            -g"
             
            echo now compiling $lib_name
            gcc -c $flags -fpic $list_of_source_files
            
            if [ $? != "0" ]
               then echo
                    echo "error(s) found while compiling"
                    exit 100
               else echo
                    gcc -shared -o $lib_name.so $list_of_object_files
            		rm *.o
            		echo "lib created"
            fi
            

            Following the documentation

            Here the files used for compilation.
            1fe55a9e-c0ac-49b1-9057-f1a51e63364e-image.png

            Sorry I'm kind of beginner with Linux and C++ globally (too much time on windows and C# sadly for me)

            JonBJ Offline
            JonBJ Offline
            JonB
            wrote on last edited by
            #7

            @LudoFR
            These are the files in the lib directory. I asked to see the files in the lib/build_x64 subdirectory.

            LudoFRL 1 Reply Last reply
            0
            • JonBJ JonB

              @LudoFR
              These are the files in the lib directory. I asked to see the files in the lib/build_x64 subdirectory.

              LudoFRL Offline
              LudoFRL Offline
              LudoFR
              wrote on last edited by
              #8

              @JonB No files into this folder, its just the lib compilation ouput folder

              JonBJ 1 Reply Last reply
              0
              • LudoFRL LudoFR

                @JonB No files into this folder, its just the lib compilation ouput folder

                JonBJ Offline
                JonBJ Offline
                JonB
                wrote on last edited by JonB
                #9

                @LudoFR
                Umm, if there are no files in that folder then there is no library to link against....!

                Did you actually run the script to build the library?

                lib_name=./build_x64/libDelibTcp

                I am expecting to see that created at least build_x64/libDelibTcp.so.

                LudoFRL 1 Reply Last reply
                0
                • JonBJ JonB

                  @LudoFR
                  Umm, if there are no files in that folder then there is no library to link against....!

                  Did you actually run the script to build the library?

                  lib_name=./build_x64/libDelibTcp

                  I am expecting to see that created at least build_x64/libDelibTcp.so.

                  LudoFRL Offline
                  LudoFRL Offline
                  LudoFR
                  wrote on last edited by LudoFR
                  #10

                  @JonB

                  Yes I run the script :

                  0_make_tcp_encryption_lib_x64.sh
                  

                  Sorry my fault, there is no files except the libDelibTcp.so

                  944f831d-98ef-42ed-a4da-8f104da909b6-image.png

                  Compilation output from QT look different, (I do not have change anything)

                  09:47:57: Running steps for project DeditecQuickCpp...
                  09:47:57: Configuration unchanged, skipping qmake step.
                  09:47:57: Starting: "/usr/bin/make" -j20
                  g++ -Wl,-rpath,/home/ludo/Qt/6.4.2/gcc_64/lib -Wl,-rpath-link,/home/ludo/Qt/6.4.2/gcc_64/lib -o DeditecQuickCpp  main.o qrc_qmake_resources.o   -L/home/ludo/Documents/Dev_C/QT/DeditecQuickCpp/delib/lib/build_x64/ -lDelibTcp /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Quick.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6OpenGL.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Gui.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6QmlModels.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Qml.so -pthread /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Network.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Core.so -lpthread -lGL   
                  /usr/bin/ld: main.o: in function `main':
                  /home/ludo/Documents/Dev_C/QT/build-DeditecQuickCpp-Desktop_Qt_6_4_2_GCC_64bit-Debug/../DeditecQuickCpp/main.cpp:23: undefined reference to `DapiOpenModuleEx'
                  collect2: error: ld returned 1 exit status
                  make: *** [Makefile:211: DeditecQuickCpp] Error 1
                  09:47:57: The process "/usr/bin/make" exited with code 2.
                  Error while building/deploying project DeditecQuickCpp (kit: Desktop Qt 6.4.2 GCC 64bit)
                  When executing step "Make"
                  09:47:57: Elapsed time: 00:00.
                  
                  
                  JonBJ 1 Reply Last reply
                  0
                  • LudoFRL LudoFR

                    @JonB

                    Yes I run the script :

                    0_make_tcp_encryption_lib_x64.sh
                    

                    Sorry my fault, there is no files except the libDelibTcp.so

                    944f831d-98ef-42ed-a4da-8f104da909b6-image.png

                    Compilation output from QT look different, (I do not have change anything)

                    09:47:57: Running steps for project DeditecQuickCpp...
                    09:47:57: Configuration unchanged, skipping qmake step.
                    09:47:57: Starting: "/usr/bin/make" -j20
                    g++ -Wl,-rpath,/home/ludo/Qt/6.4.2/gcc_64/lib -Wl,-rpath-link,/home/ludo/Qt/6.4.2/gcc_64/lib -o DeditecQuickCpp  main.o qrc_qmake_resources.o   -L/home/ludo/Documents/Dev_C/QT/DeditecQuickCpp/delib/lib/build_x64/ -lDelibTcp /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Quick.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6OpenGL.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Gui.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6QmlModels.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Qml.so -pthread /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Network.so /home/ludo/Qt/6.4.2/gcc_64/lib/libQt6Core.so -lpthread -lGL   
                    /usr/bin/ld: main.o: in function `main':
                    /home/ludo/Documents/Dev_C/QT/build-DeditecQuickCpp-Desktop_Qt_6_4_2_GCC_64bit-Debug/../DeditecQuickCpp/main.cpp:23: undefined reference to `DapiOpenModuleEx'
                    collect2: error: ld returned 1 exit status
                    make: *** [Makefile:211: DeditecQuickCpp] Error 1
                    09:47:57: The process "/usr/bin/make" exited with code 2.
                    Error while building/deploying project DeditecQuickCpp (kit: Desktop Qt 6.4.2 GCC 64bit)
                    When executing step "Make"
                    09:47:57: Elapsed time: 00:00.
                    
                    
                    JonBJ Offline
                    JonBJ Offline
                    JonB
                    wrote on last edited by JonB
                    #11

                    @LudoFR
                    Because I am a very nice guy [ ;-) ] I downloaded your "deditec" library stuff for Linux and set up a tiny project to use it. I get the same "undefined" on any Dapi... call as you do.

                    So then I went ran on lib/build_x64/libDelibTcp.so (I just used the one already compiled there)

                    nm --dynamic libDelibTcp.so
                    

                    This shows me all the symbols defined/exported in libDelibTcp.so. And there is nothing even vaguely like Dapi... anything there. Just some Blowfish... and dt_... functions.

                    So.... I don't know what you are supposed to be using (I'm not going to read the whole Delib documenation). But I can only conclude that including the delib.h stuff which declares Dapi... functions requires something very different from (at least the currently built) libDelibTcp.so content to link against....

                    The script name indicates to me that it is just for some encryption routines (0_make_tcp_encryption_lib_x64.sh). I think there is quite some other library you are supposed to be linking against for anything Dapi...??

                    In the delib directory I see all the delib_Dapi_... source files. I suspect that is what needs building? I see your DapiOpenModuleEx implementation is defined in file delib_open_close.cpp.

                    Maybe go look in the supplied samples directory? There I see e.g. 1_compile_usb_sample.sh. Looking in that I see a gcc command which explicitly compiles and links a whole bunch of the source files, including a couple of delib_Dapi... ones. Does this indicate how you are supposed to do it? So no library for those source files, rather you are supposed to compile them to .o files and link them against your code? Same for the "ethernet" sample, which includes a readme.txt, clarifying that libDelibTcp.so is only to do with encryption....

                    LudoFRL 1 Reply Last reply
                    1
                    • JonBJ JonB

                      @LudoFR
                      Because I am a very nice guy [ ;-) ] I downloaded your "deditec" library stuff for Linux and set up a tiny project to use it. I get the same "undefined" on any Dapi... call as you do.

                      So then I went ran on lib/build_x64/libDelibTcp.so (I just used the one already compiled there)

                      nm --dynamic libDelibTcp.so
                      

                      This shows me all the symbols defined/exported in libDelibTcp.so. And there is nothing even vaguely like Dapi... anything there. Just some Blowfish... and dt_... functions.

                      So.... I don't know what you are supposed to be using (I'm not going to read the whole Delib documenation). But I can only conclude that including the delib.h stuff which declares Dapi... functions requires something very different from (at least the currently built) libDelibTcp.so content to link against....

                      The script name indicates to me that it is just for some encryption routines (0_make_tcp_encryption_lib_x64.sh). I think there is quite some other library you are supposed to be linking against for anything Dapi...??

                      In the delib directory I see all the delib_Dapi_... source files. I suspect that is what needs building? I see your DapiOpenModuleEx implementation is defined in file delib_open_close.cpp.

                      Maybe go look in the supplied samples directory? There I see e.g. 1_compile_usb_sample.sh. Looking in that I see a gcc command which explicitly compiles and links a whole bunch of the source files, including a couple of delib_Dapi... ones. Does this indicate how you are supposed to do it? So no library for those source files, rather you are supposed to compile them to .o files and link them against your code? Same for the "ethernet" sample, which includes a readme.txt, clarifying that libDelibTcp.so is only to do with encryption....

                      LudoFRL Offline
                      LudoFRL Offline
                      LudoFR
                      wrote on last edited by
                      #12

                      @JonB Wow, really I want to thank you for your effort, this mean a lot seriously.

                      To be honest, this is why I think for the start because this lib is totally different from the one I use in C#.

                      So if I understand good I need to compile all files listed here :

                      #!/bin/bash
                      
                      bin_name=ethernet_sample
                      preprocessor_defines="-D USE_ETH"
                      
                      list_of_files="
                      source/ethernet_sample.c
                      
                      ../../delib-sources/delib/library/vc/deditec_timer.c
                      ../../delib-sources/delib/library/vc/deditec_tcp_io.c
                      ../../delib-sources/delib/library/vc/deditec_buff_utils.c
                      ../../delib-sources/delib/library/vc/deditec_string_utils.c
                      ../../delib-sources/delib/library/vc/deditec_convert_functions.c
                      ../../delib-sources/delib/library/embedded/deditec_debug_comfort.c
                      
                      ../../delib-sources/delib/delib_hdlmgr.c
                      ../../delib-sources/delib/delib_packet_statistic.c
                      ../../delib-sources/delib/delib_Dapi_di_do_ad_da_befehle.c
                      ../../delib-sources/delib/delib_set_get_error.c
                      ../../delib-sources/delib/delib_Dapi_register_commands.c
                      ../../delib-sources/delib/delib_open_close.c
                      ../../delib-sources/delib/delib_io_tcp.c
                      -g"
                      
                      echo now compiling $bin_name
                      gcc $preprocessor_defines -o $bin_name $list_of_files
                      
                      if [ $? != "0" ]
                         then echo
                              echo "error(s) found while compiling"
                              exit 100
                         else echo
                              echo "compiling successfull"
                      fi
                      

                      Into a *.o lib?

                      JonBJ 1 Reply Last reply
                      0
                      • LudoFRL LudoFR

                        @JonB Wow, really I want to thank you for your effort, this mean a lot seriously.

                        To be honest, this is why I think for the start because this lib is totally different from the one I use in C#.

                        So if I understand good I need to compile all files listed here :

                        #!/bin/bash
                        
                        bin_name=ethernet_sample
                        preprocessor_defines="-D USE_ETH"
                        
                        list_of_files="
                        source/ethernet_sample.c
                        
                        ../../delib-sources/delib/library/vc/deditec_timer.c
                        ../../delib-sources/delib/library/vc/deditec_tcp_io.c
                        ../../delib-sources/delib/library/vc/deditec_buff_utils.c
                        ../../delib-sources/delib/library/vc/deditec_string_utils.c
                        ../../delib-sources/delib/library/vc/deditec_convert_functions.c
                        ../../delib-sources/delib/library/embedded/deditec_debug_comfort.c
                        
                        ../../delib-sources/delib/delib_hdlmgr.c
                        ../../delib-sources/delib/delib_packet_statistic.c
                        ../../delib-sources/delib/delib_Dapi_di_do_ad_da_befehle.c
                        ../../delib-sources/delib/delib_set_get_error.c
                        ../../delib-sources/delib/delib_Dapi_register_commands.c
                        ../../delib-sources/delib/delib_open_close.c
                        ../../delib-sources/delib/delib_io_tcp.c
                        -g"
                        
                        echo now compiling $bin_name
                        gcc $preprocessor_defines -o $bin_name $list_of_files
                        
                        if [ $? != "0" ]
                           then echo
                                echo "error(s) found while compiling"
                                exit 100
                           else echo
                                echo "compiling successfull"
                        fi
                        

                        Into a *.o lib?

                        JonBJ Offline
                        JonBJ Offline
                        JonB
                        wrote on last edited by JonB
                        #13

                        @LudoFR said in undefined reference - Help first time external header library QT C++ [Linux]:

                        Wow, really I want to thank you for your effort, this mean a lot seriously.

                        That's good, because I'm expecting a beer ;-)

                        Into a *.o lib?

                        No. Compiling each of those files separately will produce a .o file for each of the .c source files. This example does not show any library (.so, or for that matter .a) being generated from them. I presume that is how it is intended to work, author does not want you to create a single library but rather compile them all and link all the .o files.

                        Assuming this is so, then I believe you will have to add all whatever necessary .c files (may not be all the ones in this example, might be others, I don't know) into your Qt project as source files, in addition to your own source file(s). Then when you build the project all the .o files will be created separately, and all must be included in the link line.

                        I'm afraid it's over to you to do whatever to get all those source files correctly added into the project in Creator/the .pro file. You will have to be careful the paths are right and their header (.h) files are found correctly.

                        P.S.
                        At this point have you considered dropping this third-party Borland stuff completely and using Qt's QTcpSocket to do whatever you want from TCP instead? But I'm not offering to change your own source code over from using Borland TCP to Qt's ;-)

                        LudoFRL 1 Reply Last reply
                        0
                        • JonBJ JonB

                          @LudoFR said in undefined reference - Help first time external header library QT C++ [Linux]:

                          Wow, really I want to thank you for your effort, this mean a lot seriously.

                          That's good, because I'm expecting a beer ;-)

                          Into a *.o lib?

                          No. Compiling each of those files separately will produce a .o file for each of the .c source files. This example does not show any library (.so, or for that matter .a) being generated from them. I presume that is how it is intended to work, author does not want you to create a single library but rather compile them all and link all the .o files.

                          Assuming this is so, then I believe you will have to add all whatever necessary .c files (may not be all the ones in this example, might be others, I don't know) into your Qt project as source files, in addition to your own source file(s). Then when you build the project all the .o files will be created separately, and all must be included in the link line.

                          I'm afraid it's over to you to do whatever to get all those source files correctly added into the project in Creator/the .pro file. You will have to be careful the paths are right and their header (.h) files are found correctly.

                          P.S.
                          At this point have you considered dropping this third-party Borland stuff completely and using Qt's QTcpSocket to do whatever you want from TCP instead? But I'm not offering to change your own source code over from using Borland TCP to Qt's ;-)

                          LudoFRL Offline
                          LudoFRL Offline
                          LudoFR
                          wrote on last edited by
                          #14

                          @JonB

                          Well not against offering you a beer, or two...(or more :-))

                          @JonB said in undefined reference - Help first time external header library QT C++ [Linux]:

                          At this point have you considered dropping this third-party Borland stuff completely and using Qt's QTcpSocket to do whatever you want from TCP instead? But I'm not offering to change your own source code over from using Borland TCP to Qt's ;-)

                          This APi is used for GPIO manipulation from an ethernet GPIO modules :
                          787d599f-c9e0-4a81-b147-61a7492b4eee-image.png

                          What you say seems really true, cause the documentation about the use with Visual studio c++ do not refer at any moment about any library, only cpp/h files. I will try to use this documentation and use into my *.pro file only the files used into Visual Studio.

                          https://www.deditec.de/media/pdf/manual_e_delib.pdf#page=26&zoom=auto,-329,815

                          I will made you a feedback of course

                          1 Reply Last reply
                          1

                          • Login

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