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. Snap7 Undefined Reference to TS7Client::TS7Client()
Forum Updated to NodeBB v4.3 + New Features

Snap7 Undefined Reference to TS7Client::TS7Client()

Scheduled Pinned Locked Moved Solved General and Desktop
24 Posts 4 Posters 7.2k Views 2 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.
  • Z Offline
    Z Offline
    ZekDe
    wrote on last edited by
    #10

    Also I am using Mıngw32 also this is the project source webside .you can download and see ,little mb.

    https://sourceforge.net/projects/snap7/files/1.4.2/

    1 Reply Last reply
    0
    • Z Offline
      Z Offline
      ZekDe
      wrote on last edited by ZekDe
      #11

      This is my .pro file

      QT += core gui

      greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

      TARGET = untitled1
      TEMPLATE = app

      DEFINES += QT_DEPRECATED_WARNINGS

      SOURCES +=
      main.cpp
      mainwindow.cpp
      snap7.cpp

      HEADERS +=
      mainwindow.h \

      FORMS +=
      mainwindow.ui

      win32: LIBS += -L$$PWD/./ -lsnap7

      INCLUDEPATH += $$PWD/.
      DEPENDPATH += $$PWD/.

      1 Reply Last reply
      0
      • Z Offline
        Z Offline
        ZekDe
        wrote on last edited by
        #12

        into .h

        #ifndef MAINWINDOW_H
        #define MAINWINDOW_H
        
        #include <QMainWindow>
        //#include "snap7.h"
        class TS7Client;
        
        namespace Ui {
        class MainWindow;
        }
        
        class MainWindow : public QMainWindow
        {
            Q_OBJECT
        
        public:
            explicit MainWindow(QWidget *parent = 0);
        
            void CliCompletion(void *usrPtr, int opCode, int opResult);
            void SysSleep(uint32_t Delay_ms);
            bool Check(int Result, const char * function);
            void MultiRead();
            void ListBlocks();
            void OrderCode();
            void CpuInfo();
            void CpInfo();
            void UnitStatus();
            void UploadDB0();
            void AsCBUploadDB0();
            void AsEWUploadDB0();
            void AsPOUploadDB0();
            void ReadSzl_0011_0000();
            bool CliConnect();
            void CliDisconnect();
            void PerformTests();
            void Summary();
            //void hexdump(void *mem, unsigned int len);
        
            ~MainWindow();
        
        private:
            Ui::MainWindow *ui;
        
                 TS7Client *Client;
        
                 uint8_t Buffer[65536]; // 64 K buffer
                 int SampleDBNum = 1000;
        
                 char *Address = (char*)"192.168.0.1" ;     // PLC IP Address
                 int Rack=0,Slot=1; // Default Rack and Slot
        
                 int ok = 0; // Number of test pass
                 int ko = 0; // Number of test failure
        
                 bool JobDone=false;
                 int JobResult=0;
        };
        
        #endif // MAINWINDOW_H
        
        

        into .cpp

        #include "mainwindow.h"
        #include "ui_mainwindow.h"
        #include <stdio.h>
        #include <stdlib.h>
        #include "QThread"
        #include "QString"
        #include "snap7.h"
        
        MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),ui(new Ui::MainWindow)
        {
            ui->setupUi(this);
        
         TS7Client *abc = new TS7Client();
        
        
        if (CliConnect())
           {
               PerformTests();
               CliDisconnect();
           }
        
           delete Client;
           Summary();
        }
        
        void MainWindow::CliCompletion(void *usrPtr, int opCode, int opResult)
        {
            JobResult=opResult;
            JobDone = true;
        }
        
        /**********************************************************************************************/
        // SysSleep (copied from snap_sysutils.cpp) multiplatform millisec sleep
        //------------------------------------------------------------------------------
        void MainWindow::SysSleep(longword Delay_ms)
        {
            QThread::msleep(Delay_ms);
        }
        
        bool MainWindow::Check(int Result, const char *function)
        {
            ui->textEdit->append("\n");
                ui->textEdit->append("+-----------------------------------------------------\n");
                ui->textEdit->append(function);
                ui->textEdit->append("+-----------------------------------------------------\n");
                if (Result==0) {
                    ui->textEdit->append("| Result         : OK\n");
                    ui->textEdit->append("| Execution time : " + QString::number(Client->ExecTime()));
                    ui->textEdit->append("+-----------------------------------------------------\n");
                    ok++;
                }
                else {
                    ui->textEdit->append("| ERROR !!! \n");
                    if (Result<0)
                        ui->textEdit->append("| Library Error (-1)\n");
                    else
                    ui->textEdit->append(tr("| %1").arg(CliErrorText(Result).c_str()));
                    ui->textEdit->append("+-----------------------------------------------------\n");
                    ko++;
                }
                return Result==0;
        }
        
        void MainWindow::MultiRead()
        {
            // Multiread buffers
                byte MB[16]; // 16 Merker bytes
                byte EB[16]; // 16 Digital Input bytes
                byte AB[16]; // 16 Digital Output bytes
                word TM[8];  // 8 timers
                word CT[8];  // 8 counters
        
                // Prepare struct
                TS7DataItem Items[5];
        
                // NOTE : *AMOUNT IS NOT SIZE* , it's the number of items
                // Merkers
                Items[0].Area     =S7AreaMK;
                Items[0].WordLen  =S7WLByte;
                Items[0].DBNumber =0;        // Don't need DB
                Items[0].Start    =0;        // Starting from 0
                Items[0].Amount   =16;       // 16 Items (bytes)
                Items[0].pdata    =&MB;
                // Digital Input bytes
                Items[1].Area     =S7AreaPE;
                Items[1].WordLen  =S7WLByte;
                Items[1].DBNumber =0;        // Don't need DB
                Items[1].Start    =0;        // Starting from 0
                Items[1].Amount   =16;       // 16 Items (bytes)
                Items[1].pdata    =&EB;
                // Digital Output bytes
                Items[2].Area     =S7AreaPA;
                Items[2].WordLen  =S7WLByte;
                Items[2].DBNumber =0;        // Don't need DB
                Items[2].Start    =0;        // Starting from 0
                Items[2].Amount   =16;       // 16 Items (bytes)
                Items[2].pdata    =&AB;
                // Timers
                Items[3].Area     =S7AreaTM;
                Items[3].WordLen  =S7WLTimer;
                Items[3].DBNumber =0;        // Don't need DB
                Items[3].Start    =0;        // Starting from 0
                Items[3].Amount   =8;        // 8 Timers
                Items[3].pdata    =&TM;
                // Counters
                Items[4].Area     =S7AreaCT;
                Items[4].WordLen  =S7WLCounter;
                Items[4].DBNumber =0;        // Don't need DB
                Items[4].Start    =0;        // Starting from 0
                Items[4].Amount   =8;        // 8 Counters
                Items[4].pdata    =&CT;
        
                int res=Client->ReadMultiVars(&Items[0],5);
        
                if (Check(res,"Multiread Vars"))
                {
                   // Result of Client->ReadMultivars is the "global result" of
                   // the function, it's OK if something was exchanged.
        
                   // But we need to check single Var results.
                   // Let shall suppose that we ask for 5 vars, 4 of them are ok but
                   // the 5th is inexistent, we will have 4 results ok and 1 not ok.
        
                   ui->textEdit->append("Dump MB0..MB15 - Var Result : " + QString::number(Items[0].Result));
        //           if (Items[0].Result==0)
        //               hexdump(&MB,16);
                   ui->textEdit->append("Dump EB0..EB15 - Var Result : " + QString::number(Items[1].Result));
        //           if (Items[1].Result==0)
        //               hexdump(&EB,16);
                   ui->textEdit->append("Dump AB0..AB15 - Var Result : " + QString::number(Items[2].Result));
        //           if (Items[2].Result==0)
        //               hexdump(&AB,16);
                   ui->textEdit->append("Dump T0..T7 - Var Result : " + QString::number(Items[3].Result));
                   /*if (Items[3].Result==0)
                       hexdump(&TM,16); */        // 8 Timers -> 16 bytes
                   ui->textEdit->append("Dump Z0..Z7 - Var Result : " + QString::number(Items[4].Result));
        //           if (Items[4].Result==0)
        //               hexdump(&CT,16);         // 8 Counters -> 16 bytes
                }
        }
        
        void MainWindow::ListBlocks()
        {
            TS7BlocksList List;
                int res=Client->ListBlocks(&List);
                if (Check(res,"List Blocks in AG"))
                {
                    ui->textEdit->append("  OBCount  : "+ QString::number(List.OBCount));
                    ui->textEdit->append("  FBCount  : "+ QString::number(List.FBCount));
                    ui->textEdit->append("  FCCount  : "+ QString::number(List.FCCount));
                    ui->textEdit->append("  SFBCount : "+ QString::number(List.SFBCount));
                    ui->textEdit->append("  SFCCount : "+ QString::number(List.SFCCount));
                    ui->textEdit->append("  DBCount  : "+ QString::number(List.DBCount));
                    ui->textEdit->append("  SDBCount : "+ QString::number(List.SDBCount));
                }
        }
        
        void MainWindow::OrderCode()
        {
            TS7OrderCode Info;
                 int res=Client->GetOrderCode(&Info);
                 if (Check(res,"Catalog"))
                 {
        
                      ui->textEdit->append(tr("Order Code : %1").arg(Info.Code));
                      ui->textEdit->append(tr("Version : %1.%2.%3")
                       .arg(QString::number(Info.V1)).arg(QString::number(Info.V2)).QString::number(Info.V3));
                 }
        }
        
        void MainWindow::CpuInfo()
        {
                TS7CpuInfo Info;
                 int res=Client->GetCpuInfo(&Info);
                 if (Check(res,"Unit Info"))
                 {
                       ui->textEdit->append(tr("  Module Type Name : %1").arg(Info.ModuleTypeName));
                       ui->textEdit->append(tr("  Serial Number    : %1").arg(Info.SerialNumber));
                       ui->textEdit->append(tr("  AS Name          : %1").arg(Info.ASName));
                       ui->textEdit->append(tr("  Module Name      : %1").arg(Info.ModuleName));
                 }
        }
        
        void MainWindow::CpInfo()
        {
            TS7CpInfo Info;
                 int res=Client->GetCpInfo(&Info);
                 if (Check(res,"Communication processor Info"))
                 {
                      ui->textEdit->append("  Max PDU Length   : " + QString::number(Info.MaxPduLengt) + " bytes");
                      ui->textEdit->append("  Max Connections  : " + QString::number(Info.MaxConnections));
                      ui->textEdit->append("  Max MPI Rate     : " + QString::number(Info.MaxMpiRate) + " bps");
                      ui->textEdit->append("  Max Bus Rate     : " + QString::number(Info.MaxBusRate) + " bps");
                 };
        }
        //------------------------------------------------------------------------------
        // PLC Status
        //------------------------------------------------------------------------------
        void MainWindow::UnitStatus()
        {
            int res=0;
                 int Status=Client->PlcStatus();
                 if (Check(res,"CPU Status"))
                 {
                      switch (Status)
                      {
                          case S7CpuStatusRun : printf("  RUN\n"); break;
                          case S7CpuStatusStop: printf("  STOP\n"); break;
                          default             : printf("  UNKNOWN\n"); break;
                      }
                 }
        }
        
        //------------------------------------------------------------------------------
        // Upload DB0 (surely exists in AG)
        //------------------------------------------------------------------------------
        
        void MainWindow::UploadDB0()
        {
                 int Size = sizeof(Buffer); // Size is IN/OUT par
                                            // In input it tells the client the size available
                                            // In output it tells us how many bytes were uploaded.
                 int res=Client->Upload(Block_SDB, 0, &Buffer, &Size);
                 if (Check(res,"Block Upload (SDB 0)"))
                 {
                      ui->textEdit_2->append(tr("Dump (%1 bytes)").arg(Size));
                      //hexdump(&Buffer,Size);
                 }
        }
        //------------------------------------------------------------------------------
        // Async Upload DB0 (using callback as completion trigger)
        //------------------------------------------------------------------------------
        void MainWindow::AsCBUploadDB0()
        {
            int Size = sizeof(Buffer); // Size is IN/OUT par
                                            // In input it tells the client the size available
                                            // In output it tells us how many bytes were uploaded.
                 JobDone=false;
                 int res=Client->AsUpload(Block_SDB, 0, &Buffer, &Size);
        
                 if (res==0)
                 {
                     while (!JobDone)
                     {
                         SysSleep(100);
                     }
                     res=JobResult;
                 }
        
                 if (Check(res,"Async (callback) Block Upload (SDB 0)"))
                 {
                       ui->textEdit_2->append(tr("Dump (%1 bytes) : ").arg(QString::number(Size)));
                     // hexdump(&Buffer,Size);
                 }
        }
        
        void MainWindow::AsEWUploadDB0()
        {
            int Size = sizeof(Buffer); // Size is IN/OUT par
                                            // In input it tells the client the size available
                                            // In output it tells us how many bytes were uploaded.
                 JobDone=false;
                 int res=Client->AsUpload(Block_SDB, 0, &Buffer, &Size);
        
                 if (res==0)
                 {
                     res=Client->WaitAsCompletion(3000);
                 }
        
                 if (Check(res,"Async (Wait event) Block Upload (SDB 0)"))
                 {
                       ui->textEdit_2->append(tr("Dump (%1 bytes) : ").arg(QString::number(Size)));
                     // hexdump(&Buffer,Size);
                 }
        }
        //------------------------------------------------------------------------------
        // Async Upload DB0 (using polling as completion trigger)
        //------------------------------------------------------------------------------
        void MainWindow::AsPOUploadDB0()
        {
            int Size = sizeof(Buffer); // Size is IN/OUT par
                                            // In input it tells the client the size available
                                            // In output it tells us how many bytes were uploaded.
                 JobDone=false;
                 int res=Client->AsUpload(Block_SDB, 0, &Buffer, &Size);
        
                 if (res==0)
                 {
                     while (!Client->CheckAsCompletion(&res))
                     {
                         SysSleep(100);
                     };
                 }
        
                 if (Check(res,"Async (polling) Block Upload (SDB 0)"))
                 {
                       ui->textEdit_2->append(tr("Dump (%1 bytes) : ").arg(Size));
                     // hexdump(&Buffer,Size);
                 }
        }
        //------------------------------------------------------------------------------
        // Read a sample SZL Block
        //------------------------------------------------------------------------------
        void MainWindow::ReadSzl_0011_0000()
        {
                 PS7SZL SZL = PS7SZL(&Buffer);  // use our buffer casted as TS7SZL
                 int Size = sizeof(Buffer);
                 // Block ID 0x0011 IDX 0x0000 normally exists in every CPU
                 int res=Client->ReadSZL(0x0011, 0x0000, SZL, &Size);
                 if (Check(res,"Read SZL - ID : 0x0011, IDX 0x0000"))
                 {
                    ui->textEdit_2->append(tr("  LENTHDR : %1").arg(SZL->Header.LENTHDR));
                    ui->textEdit_2->append(tr("  N_DR    : %1").arg(SZL->Header.N_DR));
                    ui->textEdit_2->append(tr("Dump (%1 bytes) ").arg(Size));
                    //hexdump(&Buffer,Size);
                 }
        }
        //------------------------------------------------------------------------------
        // Unit Connection
        //------------------------------------------------------------------------------
        bool MainWindow::CliConnect()
        {
            int res = Client->ConnectTo(Address,Rack,Slot);
                if (Check(res,"UNIT Connection")) {
                      ui->textEdit_2->append(tr("  Connected to   : %1 (Rack= %2, Slot= %3)").arg(Address).arg(Rack).arg(Slot));
                      ui->textEdit_2->append(tr("  PDU Requested  : %1 bytes").arg(Client->PDURequested()));
                      ui->textEdit_2->append(tr("  PDU Negotiated : %1 bytes").arg(Client->PDULength()));
                };
                return res==0;
        }
        //------------------------------------------------------------------------------
        // Unit Disconnection
        //------------------------------------------------------------------------------
        void MainWindow::CliDisconnect()
        {
            Client->Disconnect();
        }
        //------------------------------------------------------------------------------
        // Perform readonly tests, no cpu status modification
        //------------------------------------------------------------------------------
        void MainWindow::PerformTests()
        {
                 OrderCode();
                 CpuInfo();
                 CpInfo();
                 UnitStatus();
                 ReadSzl_0011_0000();
                 UploadDB0();
                 AsCBUploadDB0();
                 AsEWUploadDB0();
                 AsPOUploadDB0();
                 MultiRead();
        }
        //------------------------------------------------------------------------------
        // Tests Summary
        //------------------------------------------------------------------------------
        void MainWindow::Summary()
        {
            ui->textEdit_2->append("+-----------------------------------------------------\n");
            ui->textEdit_2->append("| Test Summary ");
            ui->textEdit_2->append("+-----------------------------------------------------\n");
            ui->textEdit_2->append(tr("| Performed : %1").arg(ok+ko));
            ui->textEdit_2->append(tr("| Passed    : %1").arg(ok));
            ui->textEdit_2->append(tr("| Failed    : %1").arg(ko));
        }
        
        /**********************************************************************************************/
        #ifndef HEXDUMP_COLS
        #define HEXDUMP_COLS 16
        #endif
        //void MainWindow::hexdump(void *mem, unsigned int len)
        //{
        //        unsigned int i, j;
        
        //        for(i = 0; i < len + ((len % HEXDUMP_COLS) ? (HEXDUMP_COLS - len % HEXDUMP_COLS) : 0); i++)
        //        {
        //                /* print offset */
        //                if(i % HEXDUMP_COLS == 0)
        //                {
        //                        u(ui->textEdit,"0x%04x: ", i);
        //                        ui->textEdit_2->setText();
        //                }
        
        //                /* print hex data */
        //                if(i < len)
        //                {
        //                        printf("%02x ", 0xFF & ((char*)mem)[i]);
        //                }
        //                else /* end of block, just aligning for ASCII dump */
        //                {
        //                        printf("   ");
        //                }
        
        //                /* print ASCII dump */
        //                if(i % HEXDUMP_COLS == (HEXDUMP_COLS - 1))
        //                {
        //                        for(j = i - (HEXDUMP_COLS - 1); j <= i; j++)
        //                        {
        //                                if(j >= len) /* end of block, not really printing */
        //                                {
        //                                        putchar(' ');
        //                                }
        //                                else if(isprint((((char*)mem)[j] & 0x7F))) /* printable char */
        //                                {
        //                                        putchar(0xFF & ((char*)mem)[j]);
        //                                }
        //                                else /* other char */
        //                                {
        //                                        putchar('.');
        //                                }
        //                        }
        //                        putchar('\n');
        //                }
        //        }
        //}
        
        MainWindow::~MainWindow()
        {
            delete ui;
        }
        
        
        1 Reply Last reply
        0
        • SGaistS Offline
          SGaistS Offline
          SGaist
          Lifetime Qt Champion
          wrote on last edited by
          #13

          Which option are you currently using ?

          Embedding the library or linking to it ?

          If the later, did you compile it with the same compiler used for Qt ?

          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
          • Z Offline
            Z Offline
            ZekDe
            wrote on last edited by
            #14

            I didnt understan excatly what you mean.I wanna use link the .lib so that I will use just 3 files .h,.cpp,.lib but I suppose I have to use .dll as well in same file with .lib adding exectuble folder(I doesnt work,like you see Qt create a debug file and .exe after the compile )

            1 Reply Last reply
            0
            • Z Offline
              Z Offline
              ZekDe
              wrote on last edited by
              #15

              Okay okay, when I create the this object in mainwindow.h ,this is being creating but I couldn't reach it from in mainwinbdow.cpp

              into mainwindow.h

              #ifndef MAINWINDOW_H
              #define MAINWINDOW_H
              
              #include <QMainWindow>
              #include "snap7.h"
              
              
              namespace Ui {
              class MainWindow;
              }
              
              class MainWindow : public QMainWindow
              {
                  Q_OBJECT
              
              public:
                  explicit MainWindow(QWidget *parent = 0);
              
                  void CliCompletion(void *usrPtr, int opCode, int opResult);
                  void SysSleep(uint32_t Delay_ms);
                  bool Check(int Result, const char * function);
                  void MultiRead();
                  void ListBlocks();
                  void OrderCode();
                  void CpuInfo();
                  void CpInfo();
                  void UnitStatus();
                  void UploadDB0();
                  void AsCBUploadDB0();
                  void AsEWUploadDB0();
                  void AsPOUploadDB0();
                  void ReadSzl_0011_0000();
                  bool CliConnect();
                  void CliDisconnect();
                  void PerformTests();
                  void Summary();
                  //void hexdump(void *mem, unsigned int len);
              
                  ~MainWindow();
              
              private:
                  Ui::MainWindow *ui;
              
                       TS7Client *Client = new TS7Client();
              
                       uint8_t Buffer[65536]; // 64 K buffer
                       int SampleDBNum = 1000;
              
                       char *Address = (char*)"192.168.0.1" ;     // PLC IP Address
                       int Rack=0,Slot=1; // Default Rack and Slot
              
                       int ok = 0; // Number of test pass
                       int ko = 0; // Number of test failure
              
                       bool JobDone=false;
                       int JobResult=0;
              };
              
              #endif // MAINWINDOW_H
              
              

              into .cpp```
              0_1516196444568_efe5b0dc-d8d7-481d-a4c8-9b9eb9a7aad1-image.png //your code here

              1 Reply Last reply
              0
              • Z Offline
                Z Offline
                ZekDe
                wrote on last edited by
                #16

                I am missing something ,I couldnt get to used C++ yet

                1 Reply Last reply
                0
                • Z Offline
                  Z Offline
                  ZekDe
                  wrote on last edited by
                  #17

                  ![alt text](0_1516196914626_2e46ef7a-b7c6-47f9-aebd-137eced44bbc-image.png image url)

                  0_1516196938513_0c459213-da27-4662-ad9b-38e038f66077-image.png

                  1 Reply Last reply
                  0
                  • Z Offline
                    Z Offline
                    ZekDe
                    wrote on last edited by
                    #18

                    When I add the source files ,it worked properly.Also this lines is being added,I dont know why

                    win32:LIBS += C:\Qt\Tools\mingw530_32\i686-w64-mingw32\lib\libws2_32.a
                    win32:LIBS += C:\Qt\Tools\mingw530_32\i686-w64-mingw32\lib\libwinmm.a

                    mrjjM 1 Reply Last reply
                    0
                    • Z ZekDe

                      When I add the source files ,it worked properly.Also this lines is being added,I dont know why

                      win32:LIBS += C:\Qt\Tools\mingw530_32\i686-w64-mingw32\lib\libws2_32.a
                      win32:LIBS += C:\Qt\Tools\mingw530_32\i686-w64-mingw32\lib\libwinmm.a

                      mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by
                      #19

                      @ZekDe
                      its runtime libs from the compiler.

                      1 Reply Last reply
                      0
                      • Z Offline
                        Z Offline
                        ZekDe
                        wrote on last edited by
                        #20

                        well, how can I reliase it if I use any libs

                        mrjjM 1 Reply Last reply
                        0
                        • Z ZekDe

                          well, how can I reliase it if I use any libs

                          mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on last edited by
                          #21

                          @ZekDe
                          In what way realize ?
                          It surely uses its runtime files.

                          1 Reply Last reply
                          0
                          • Z Offline
                            Z Offline
                            ZekDe
                            wrote on last edited by
                            #22

                            when I create a new project there are no these lines.A guy give me a sample project and these lines were in it.
                            If he dont give me a project .How will I add these line?

                            1 Reply Last reply
                            0
                            • Z Offline
                              Z Offline
                              ZekDe
                              wrote on last edited by
                              #23

                              Hmm I have looked in Makefile and I encounter this line,
                              LIBS = -L"$(MINGW)/lib" -static-libgcc --no-export-all-symbols --add-stdcall-alias $(MINGW)/lib/libws2_32.a $(MINGW)/lib/libwinmm.a $(MINGW)/lib/gcc/mingw32/$(MINREL)/libstdc++.a
                              INCS = -I"$(MINGW)/include" -I"../../../src/sys" -I"../../../src/core" -I"../../../src/lib"

                              Previously I realised , there is no files in mingw32 5.3.0 but libstdc++ is available
                              Also existing a this writing in webside, "Libstdc++ are statically linked, so you don’t need to distribute them with your software" I suppose it means that.
                              I do not have enough knowledge.

                              mrjjM 1 Reply Last reply
                              0
                              • Z ZekDe

                                Hmm I have looked in Makefile and I encounter this line,
                                LIBS = -L"$(MINGW)/lib" -static-libgcc --no-export-all-symbols --add-stdcall-alias $(MINGW)/lib/libws2_32.a $(MINGW)/lib/libwinmm.a $(MINGW)/lib/gcc/mingw32/$(MINREL)/libstdc++.a
                                INCS = -I"$(MINGW)/include" -I"../../../src/sys" -I"../../../src/core" -I"../../../src/lib"

                                Previously I realised , there is no files in mingw32 5.3.0 but libstdc++ is available
                                Also existing a this writing in webside, "Libstdc++ are statically linked, so you don’t need to distribute them with your software" I suppose it means that.
                                I do not have enough knowledge.

                                mrjjM Offline
                                mrjjM Offline
                                mrjj
                                Lifetime Qt Champion
                                wrote on last edited by
                                #24

                                Hi
                                Statically linked means it is put inside and hence requires no DLL to
                                be included with the app.

                                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