Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt Creator and other tools
  4. [SOLVED] linking errors in Qt
Forum Update on Monday, May 27th 2025

[SOLVED] linking errors in Qt

Scheduled Pinned Locked Moved Qt Creator and other tools
32 Posts 4 Posters 12.9k 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.
  • G Offline
    G Offline
    goetz
    wrote on 2 Aug 2011, 21:42 last edited by
    #12

    Ouch ... I didn't reach that post in my backlog reading :-)

    http://www.catb.org/~esr/faqs/smart-questions.html

    1 Reply Last reply
    0
    • M Offline
      M Offline
      mlong
      wrote on 2 Aug 2011, 21:44 last edited by
      #13

      It's ok. It took a while to drill down to exactly what the problem was, regardless. :-)

      Software Engineer
      My views and opinions do not necessarily reflect those of anyone -- living or dead, real or fictional -- in this universe or any other similar multiverse node. Void where prohibited. Your mileage may vary. Caveat emptor.

      1 Reply Last reply
      0
      • G Offline
        G Offline
        goetz
        wrote on 2 Aug 2011, 21:56 last edited by
        #14

        No problem. I'm on a huge backlog (or rather unread clicked away posts) due to some vacation.

        So this thread can be closed?

        http://www.catb.org/~esr/faqs/smart-questions.html

        1 Reply Last reply
        0
        • M Offline
          M Offline
          mlong
          wrote on 2 Aug 2011, 22:01 last edited by
          #15

          I think we've probably gotten to the problem, but I imagine it depends on if ogopa feels like his question's been answered or not.

          Software Engineer
          My views and opinions do not necessarily reflect those of anyone -- living or dead, real or fictional -- in this universe or any other similar multiverse node. Void where prohibited. Your mileage may vary. Caveat emptor.

          1 Reply Last reply
          0
          • O Offline
            O Offline
            ogopa
            wrote on 3 Aug 2011, 13:36 last edited by
            #16

            [quote author="Volker" date="1312320331"]You usually declare the methods or functions in a header file and implement it in a source file (.c or .cpp). Your problem has nothing to do with Qt (despite that the methods are called from some slot or the like).

            Are you really sure you have implemented the methods and that implementation is actually compiled?[/quote]

            Sorry for my language it was wrong. I have defined the function in wave.cpp. I have declared it in the header file wave.h and I have called it in main.cpp. Isn't this the method used to call functions from my main.cpp to wave.cpp?

            [quote author="mlong" date="1312320550"]I'm still confused as to you're redefining the functions in wave.cpp. They are already defined in the alsa library, no? It should just be a matter of calling the functions that already exist in the library, rather than creating your own versions.
            [/quote]
            I have defined functions that I wrote myself as it contains content that I wrote, it is not a predefined function that already exists in the alsa library. The functions I wrote are write_loop(), set_sw_params() and set_hwparams().

            I'm really sorry for my terrible explanations so far.

            1 Reply Last reply
            0
            • M Offline
              M Offline
              mlong
              wrote on 3 Aug 2011, 17:57 last edited by
              #17

              Are you needing, perhaps, to put the static functions inside of your wave class, then? Then you could call them from main using wave::write_loop(), etc.? That seems like it might be a cleaner implementation than trying to deal with file scope and all kinds of C-like stuff.

              Software Engineer
              My views and opinions do not necessarily reflect those of anyone -- living or dead, real or fictional -- in this universe or any other similar multiverse node. Void where prohibited. Your mileage may vary. Caveat emptor.

              1 Reply Last reply
              0
              • G Offline
                G Offline
                goetz
                wrote on 3 Aug 2011, 18:00 last edited by
                #18

                Are you sure your wave.cpp is compiled?

                http://www.catb.org/~esr/faqs/smart-questions.html

                1 Reply Last reply
                0
                • O Offline
                  O Offline
                  ogopa
                  wrote on 3 Aug 2011, 18:18 last edited by
                  #19

                  [quote author="mlong" date="1312394247"]Are you needing, perhaps, to put the static functions inside of your wave class, then? Then you could call them from main using wave::write_loop(), etc.? That seems like it might be a cleaner implementation than trying to deal with file scope and all kinds of C-like stuff.
                  [/quote]

                  It doesn't allow functions to be placed inside a wave class.

                  [quote author="Volker" date="1312394407"]Are you sure your wave.cpp is compiled?[/quote]
                  Yes, i'm sure

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    mlong
                    wrote on 3 Aug 2011, 18:20 last edited by
                    #20

                    [quote author="ogopa" date="1312395537"]
                    It doesn't allow functions to be placed inside a wave class.
                    [/quote]

                    What doesn't allow functions to be placed inside a wave class?

                    Software Engineer
                    My views and opinions do not necessarily reflect those of anyone -- living or dead, real or fictional -- in this universe or any other similar multiverse node. Void where prohibited. Your mileage may vary. Caveat emptor.

                    1 Reply Last reply
                    0
                    • G Offline
                      G Offline
                      goetz
                      wrote on 3 Aug 2011, 18:22 last edited by
                      #21

                      Then I'm bailed out. We cannot guess, what's going on.

                      I suggest, you boil down the problem to a small, yet complete and compilable test case and provide us the sources. Then we can have a look. Just add some dummy implementation for your functions.

                      http://www.catb.org/~esr/faqs/smart-questions.html

                      1 Reply Last reply
                      0
                      • O Offline
                        O Offline
                        ogopa
                        wrote on 3 Aug 2011, 18:23 last edited by
                        #22

                        [quote author="mlong" date="1312395659"]
                        [quote author="ogopa" date="1312395537"]
                        It doesn't allow functions to be placed inside a wave class.
                        [/quote]

                        What doesn't allow functions to be placed inside a wave class?
                        [/quote]

                        Qt Creator doesn't allow to place functions inside a wave class for example inside a class of the pushbutton i.e mine is void on_pushButton_clicked().

                        1 Reply Last reply
                        0
                        • M Offline
                          M Offline
                          mlong
                          wrote on 3 Aug 2011, 18:28 last edited by
                          #23

                          Qt Creator comes with a very full-featured text editor that allows all kinds of things to happen. ;-)

                          I suspect that perhaps the problem lies with a lack of understanding of some basic C++ constructs. Without that common ground, there's not a lot I can help you with, either.

                          Classes are much, much more than a collection of GUI elements. If including a new method in a class is a stumbling block, then there's a lot of catching up that needs to be done at a very elementary level to make your life a bit easier doing this development.

                          Software Engineer
                          My views and opinions do not necessarily reflect those of anyone -- living or dead, real or fictional -- in this universe or any other similar multiverse node. Void where prohibited. Your mileage may vary. Caveat emptor.

                          1 Reply Last reply
                          0
                          • O Offline
                            O Offline
                            ogopa
                            wrote on 3 Aug 2011, 18:39 last edited by
                            #24

                            [quote author="mlong" date="1312396112"]Qt Creator comes with a very full-featured text editor that allows all kinds of things to happen. ;-)

                            I suspect that perhaps the problem lies with a lack of understanding of some basic C++ constructs. Without that common ground, there's not a lot I can help you with, either.

                            Classes are much, much more than a collection of GUI elements. If including a new method in a class is a stumbling block, then there's a lot of catching up that needs to be done at a very elementary level to make your life a bit easier doing this development.

                            [/quote]

                            [quote author="Volker" date="1312395756"]Then I'm bailed out. We cannot guess, what's going on.

                            I suggest, you boil down the problem to a small, yet complete and compilable test case and provide us the sources. Then we can have a look. Just add some dummy implementation for your functions.[/quote]

                            Thanks guys for your help, I really appreciate it. I've decided to place all the functions inside main.cpp to avoid these errors for now, so I can move on, but I would like to learn how to fix this problem so I will revisit it later.
                            So now, the errors have gone, my program builds fine without any errors, but when I run it, my gui window does not pop up and I get the following message in my output pane. I'm not sure what it means. Could you take a look please. I have tracked it down to my function int main(), but I can't see what is wrong with the function. Both the output message and my main function are below:

                            @Starting /home/test/Documents/Wave-build-desktop/Wave...
                            *** glibc detected *** /home/test/Documents/Wave-build-desktop/Wave: double free or corruption (!prev): 0x000000000060b580 ***
                            ======= Backtrace: =========
                            /lib64/libc.so.6(+0x733b6)[0x7fc7656023b6]
                            /lib64/libc.so.6(cfree+0x6c)[0x7fc7656072dc]
                            /home/test/Documents/Wave-build-desktop/Wave[0x405359]
                            /lib64/libc.so.6(__libc_start_main+0xfd)[0x7fc7655adbfd]
                            /home/test/Documents/Wave-build-desktop/Wave[0x4042b9]
                            ======= Memory map: ========
                            00400000-00409000 r-xp 00000000 08:03 9962313 /home/test/Documents/Wave-build-desktop/Wave
                            00608000-00609000 r--p 00008000 08:03 9962313 /home/test/Documents/Wave-build-desktop/Wave
                            ...
                            .......@

                            @int main(int argc, char *argv[])
                            {

                                struct option long_option[] =
                                {
                                        {"help", 0, NULL, 'h'},
                                        {"device", 1, NULL, 'D'},
                                        {"rate", 1, NULL, 'r'},
                                        {"channels", 1, NULL, 'c'},
                                        {"frequency", 1, NULL, 'f'},
                                        {"buffer", 1, NULL, 'b'},
                                        {"period", 1, NULL, 'p'},
                                        {"method", 1, NULL, 'm'},
                                        {"format", 1, NULL, 'o'},
                                        {"verbose", 1, NULL, 'v'},
                                        {"noresample", 1, NULL, 'n'},
                                        {"pevent", 1, NULL, 'e'},
                                        {NULL, 0, NULL, 0},
                                };
                                int err, morehelp;
                                snd_pcm_hw_params_t *hwparams;
                                snd_pcm_sw_params_t *swparams;
                                int method = 0;
                                short int *samp;
                                snd_pcm_t *h;
                                snd_pcm_channel_area_t *area;
                                snd_pcm_t *handle = (snd_pcm_t*) h;
                                unsigned char *samples  = (unsigned char*) samp;
                                unsigned int chn;
                                snd_pcm_channel_area_t *areas = (snd_pcm_channel_area_t*) area;
                            
                                snd_pcm_hw_params_alloca(&hwparams);
                                snd_pcm_sw_params_alloca(&swparams);
                            
                            
                                err = snd_output_stdio_attach(&output, stdout, 0);
                                if (err < 0) {
                                        printf("Output failed: %s\n", snd_strerror(err));
                                        return 0;
                                }
                            

                            // cout<<"Playback device is %s "<<","<< device);
                            // cout<<"Stream parameters are %iHz, %s, %i channels "<<","<< rate<<","<< snd_pcm_format_name(format), channels;
                            // cout<<"Sine wave rate is %.4fHz "<<","<< freq;
                            // cout<<"Using transfer method: %s "<<","<< transfer_methods[method].name;

                                if ((err = snd_pcm_open(&h, device, SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
                                        printf("Playback open error: %s\n", snd_strerror(err));
                                        return 0;
                                }
                            
                                if ((err = set_hwparams(h, hwparams, transfer_methods[method].access)) < 0) {
                                        printf("Setting of hwparams failed: %s\n", snd_strerror(err));
                                        exit(EXIT_FAILURE);
                                }
                            
                                if ((err = set_swparams(h, swparams)) < 0) {
                                        printf("Setting of swparams failed: %s\n", snd_strerror(err));
                                        exit(EXIT_FAILURE);
                                }
                            
                                if (verbose > 0)
                                        snd_pcm_dump(h, output);
                            
                                samp = new short int [period_size * channels * snd_pcm_format_physical_width(format)];
                            
                            
                                if (samp == NULL) {
                                        printf("Not enough memory\n");
                                        exit(EXIT_FAILURE);
                                }
                            
                                area = new snd_pcm_channel_area_t [channels, sizeof(snd_pcm_channel_area_t)];
                                if (area == NULL) {
                                        printf("Not enough memory\n");
                                        exit(EXIT_FAILURE);
                                }
                                for (chn = 0; chn < channels; chn++) {
                                        area[chn].addr = samp;
                                        area[chn].first = chn * snd_pcm_format_physical_width(format);
                                        area[chn].step = channels * snd_pcm_format_physical_width(format);
                                }
                            
                               err = write_loop(h, samp, area);
                                if (err < 0)
                                        printf("Transfer failed: %s\n", snd_strerror(err));
                            
                                delete(area);
                                delete(samp);
                                snd_pcm_close(h);
                                return 0;
                            

                            QApplication a(argc, argv);
                            wave w;
                            w.show();

                            return a.exec&#40;&#41;;
                            

                            }@

                            1 Reply Last reply
                            0
                            • G Offline
                              G Offline
                              goetz
                              wrote on 3 Aug 2011, 18:44 last edited by
                              #25

                              Why should it show up? You terminate main() in line 90, the program never reaches your GUI stuff on line 93 and onwards.

                              For your memory error: compile the application in debug mode and run it in the debugger, it then should print where the memory corruption occurs.

                              http://www.catb.org/~esr/faqs/smart-questions.html

                              1 Reply Last reply
                              0
                              • M Offline
                                M Offline
                                mlong
                                wrote on 3 Aug 2011, 18:45 last edited by
                                #26

                                It looks like you're doing all of your magic in main, then cleaning things up and calling return at line 90. That exits the program. Anything after that never gets executed (including all of your QApplication stuff.)

                                Software Engineer
                                My views and opinions do not necessarily reflect those of anyone -- living or dead, real or fictional -- in this universe or any other similar multiverse node. Void where prohibited. Your mileage may vary. Caveat emptor.

                                1 Reply Last reply
                                0
                                • O Offline
                                  O Offline
                                  ogopa
                                  wrote on 3 Aug 2011, 18:45 last edited by
                                  #27

                                  [quote author="Volker" date="1312397087"]Why should it show up? You terminate main() in line 90, the program never reaches your GUI stuff on line 93 and onwards.

                                  For your memory error: compile the application in debug mode and run it in the debugger, it then should print where the memory corruption occurs.[/quote]

                                  Thanks alot

                                  1 Reply Last reply
                                  0
                                  • O Offline
                                    O Offline
                                    ogopa
                                    wrote on 3 Aug 2011, 18:49 last edited by
                                    #28

                                    [quote author="mlong" date="1312397119"]It looks like you're doing all of your magic in main, then cleaning things up and calling return at line 90. That exits the program. Anything after that never gets executed (including all of your QApplication stuff.)[/quote]

                                    Thanks man

                                    1 Reply Last reply
                                    0
                                    • O Offline
                                      O Offline
                                      ogopa
                                      wrote on 4 Aug 2011, 14:44 last edited by
                                      #29

                                      [quote author="mlong" date="1312397119"]It looks like you're doing all of your magic in main, then cleaning things up and calling return at line 90. That exits the program. Anything after that never gets executed (including all of your QApplication stuff.)[/quote]

                                      [quote author="Volker" date="1312397087"]Why should it show up? You terminate main() in line 90, the program never reaches your GUI stuff on line 93 and onwards.

                                      For your memory error: compile the application in debug mode and run it in the debugger, it then should print where the memory corruption occurs.[/quote]

                                      So I commented out the return statement (as below) which exited the code to see if the gui window would pop up, but i'm still getting the exact same error and the gui window still isn't popping up. The debugger still says there is a problem with the line:
                                      @delete[] area;@
                                      however i tried debugging the program manually and i found that it runs fine and the gui window does pop up when i take out the following lines (the for loop):
                                      @for (chn = 0; chn < channels; chn++) {
                                      area[chn].addr = samp;
                                      area[chn].first = chn * snd_pcm_format_physical_width(format);
                                      area[chn].step = channels * snd_pcm_format_physical_width(format);
                                      }@
                                      I'm not sure what is wrong wit these lines

                                      @........
                                      area = new snd_pcm_channel_area_t [channels, sizeof(snd_pcm_channel_area_t)];
                                      if (area == NULL) {
                                      printf("Not enough memory\n");
                                      exit(EXIT_FAILURE);
                                      }
                                      for (chn = 0; chn < channels; chn++) {
                                      area[chn].addr = samp;
                                      area[chn].first = chn * snd_pcm_format_physical_width(format);
                                      area[chn].step = channels * snd_pcm_format_physical_width(format);
                                      }

                                         err = write_loop(h, samp, area);
                                          if (err < 0)
                                                  printf("Transfer failed: %s\n", snd_strerror(err));
                                      
                                          delete[] area;
                                          delete[] samp;
                                          snd_pcm_close(h);
                                         // return 0;
                                      

                                      QApplication a(argc, argv);
                                      wave w;
                                      w.show();

                                      return a.exec&#40;&#41;;
                                      

                                      }@

                                      1 Reply Last reply
                                      0
                                      • L Offline
                                        L Offline
                                        loladiro
                                        wrote on 4 Aug 2011, 14:48 last edited by
                                        #30

                                        shouldn't it be
                                        @
                                        area = new snd_pcm_channel_area_t [channels];
                                        @

                                        1 Reply Last reply
                                        0
                                        • O Offline
                                          O Offline
                                          ogopa
                                          wrote on 4 Aug 2011, 14:57 last edited by
                                          #31

                                          [quote author="loladiro" date="1312469334"]shouldn't it be
                                          @
                                          area = new snd_pcm_channel_area_t [channels];
                                          @[/quote]

                                          Yes,
                                          Thanks so much. It works :)

                                          1 Reply Last reply
                                          0

                                          21/32

                                          3 Aug 2011, 18:22

                                          • Login

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