Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Installation and Deployment
  4. Building standalone executable on Mac: Linker command error
Forum Updated to NodeBB v4.3 + New Features

Building standalone executable on Mac: Linker command error

Scheduled Pinned Locked Moved Solved Installation and Deployment
15 Posts 4 Posters 3.8k 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.
  • F flurinus

    Thank you very much for the answer.

    Following your suggestion, I have modified the *.proj-file as follows:

    TEMPLATE = app
    CXXFLAGS = -stdlib=libc++
    CONFIG +=  console embed_manifest_exe
    TARGET = mezzo_s
    DEPENDPATH += . ../mezzo_lib/src
    QT -=  gui
    DEFINES += _NO_GUI _BUSES
    QMAKE= $(QTDIR)/bin/qmake
    

    However, qmake &&make still yields

    (…)
    "62 warnings generated.
    clang++ -headerpad_max_install_names -arch x86_64 -o mezzo_s.app/Contents/MacOS/mezzo_s busline.o day2day.o eventlist.o grid.o icons.o link.o linktimes.o network.o node.o od.o parameters.o pvm.o q.o Random.o route.o sdfunc.o server.o trafficsignal.o signature.o turning.o vehicle.o vissimcom.o vtypes.o passenger.o od_stops.o pass_route.o main.o   -F/Library/Frameworks -L/Library/Frameworks -framework QtCore 
    Undefined symbols for architecture x86_64:
      "insert(std::map<ODSL, Travel_time, std::less<ODSL>, std::allocator<std::pair<ODSL const, Travel_time> > >&, std::map<ODSL, Travel_time, std::less<ODSL>, std::allocator<std::pair<ODSL const, Travel_time> > >&)", referenced from:
          Network::step(double) in network.o
      "insert(std::map<ODSLL, Travel_time, std::less<ODSLL>, std::allocator<std::pair<ODSLL const, Travel_time> > >&, std::map<ODSLL, Travel_time, std::less<ODSLL>, std::allocator<std::pair<ODSLL const, Travel_time> > >&)", referenced from:
          Network::step(double) in network.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    make: *** [mezzo_s.app/Contents/MacOS/mezzo_s] Error 1"
    
    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #4

    @flurinus Did you run qmake after changing pro file and then completely rebuild your app?

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

    F 1 Reply Last reply
    2
    • jsulmJ jsulm

      @flurinus Did you run qmake after changing pro file and then completely rebuild your app?

      F Offline
      F Offline
      flurinus
      wrote on last edited by
      #5

      @jsulm

      Thanks for the reply. Yes, I've completely rebuilt the projects. I have changed the .pro-file of both mezzo_lib and of mezzo_standalone, and rebuilt both projects from scratch. The error is still the same.

      1 Reply Last reply
      0
      • hskoglundH Offline
        hskoglundH Offline
        hskoglund
        wrote on last edited by
        #6

        Aha, didn't see before that you're using Qt4.8.7, I don't have it but perhaps due to its age it requires the old c++ stdlib, just a guess (again :-) but you could try changing that line in your .pro file instead to:
        CXXFLAGS = -stdlib=libstdc++

        1 Reply Last reply
        2
        • F Offline
          F Offline
          flurinus
          wrote on last edited by
          #7

          Thank you again :-). I've tried this one as well. The result is still the same. Any further input is more than welcome ;-).

          Following the suggestion of SGaist, I've also put a copy of the code on GitHub. The problem seems to be rather Mac-specific, so it may well be that on other systems building the project does not produce any errors.

          I'd be more than happy to receive any further suggestions/comments. Thanks a lot in advance!!

          1 Reply Last reply
          0
          • hskoglundH Offline
            hskoglundH Offline
            hskoglund
            wrote on last edited by
            #8

            BTW, is it possible for you to upgrade your project from Qt 4.8.7 to 5.7?

            1 Reply Last reply
            0
            • F Offline
              F Offline
              flurinus
              wrote on last edited by
              #9

              Thank you for the suggestion to upgrade to Qt 5.7. I have done so in the meantime. Since the simulator has only a rather simple GUI, there was not a single incompatibility when migrating from Qt 4.x to Qt 5.x. Strangely, however, the linker command error still prevails. And I did try including CXXFLAGS = -stdlib=libc++. I also cleaned the project before trying to build it.

              My configuration is now as follows: Clang (x86 64 bit), Qt 5.7.0 clang 64 bit, Qt Creator 4.1/Xcode 7.2.1, macOS 10.10.5.

              Any further hints are most highly appreciated! :-)

              1 Reply Last reply
              0
              • hskoglundH Offline
                hskoglundH Offline
                hskoglund
                wrote on last edited by
                #10

                Nice! Also could you update the copy of the project on GitHub? (Or perhaps there are no changes)
                If it's a 5.7 project on Github then helping you debug those errors is easier :-)

                1 Reply Last reply
                1
                • F Offline
                  F Offline
                  flurinus
                  wrote on last edited by
                  #11

                  Thanks a lot!! :)

                  No modifications in the C++ code were necessary to make it compatible with Qt 5. However, I've cleaned up the *.pro-file, leaving away some lines that do not seem to be useful (they may be useful on Windows or with earlier versions of Qt). The accordingly updated version is on GitHub.

                  One thing I've noticed is that when compiling the corresponding library (see folder mezzo_lib in the Git repository or in this thread), leaving away the line CONFIG += staticlib produces the same linker command error. Since this staticlib option only applies to libraries, adding it here does not solve the problem (it may however give some clue where the error comes from, I don't know).

                  Thanks a lot in advance!!

                  hskoglundH 1 Reply Last reply
                  0
                  • hskoglundH Offline
                    hskoglundH Offline
                    hskoglund
                    wrote on last edited by
                    #12

                    Hi, interesting, if I comment out line 7537 and 7542 in network.cpp the project builds fine:
                    2linest

                    Easiest is probably to try to rewrite those 2 lines, I'll get back...

                    1 Reply Last reply
                    1
                    • F flurinus

                      Thanks a lot!! :)

                      No modifications in the C++ code were necessary to make it compatible with Qt 5. However, I've cleaned up the *.pro-file, leaving away some lines that do not seem to be useful (they may be useful on Windows or with earlier versions of Qt). The accordingly updated version is on GitHub.

                      One thing I've noticed is that when compiling the corresponding library (see folder mezzo_lib in the Git repository or in this thread), leaving away the line CONFIG += staticlib produces the same linker command error. Since this staticlib option only applies to libraries, adding it here does not solve the problem (it may however give some clue where the error comes from, I don't know).

                      Thanks a lot in advance!!

                      hskoglundH Offline
                      hskoglundH Offline
                      hskoglund
                      wrote on last edited by hskoglund
                      #13

                      Ah, templates again (my favorite not :-(
                      Anyway in file day2day.h someone edited line 107: hfile
                      to remove the templates for the two insert() functions that the lines 7537 and 7542 in network.cpp use.

                      So one way out of this is to add the specializations as two normal functions after the template in day2day.cpp:
                      cppfile

                      Then the project builds fine again (both on the Mac and on WIndows).

                      Also note that this was a bit of a red herring re. clang, because those 2 link errors occur on Windows as well:

                      network.obj : error LNK2019: unresolved external symbol "float __cdecl insert(class std::map<struct ODSL,struct Travel_time,struct std::less<struct ODSL>,class std::allocator<struct std::pair<struct ODSL const ,struct Travel_time> > > &,class std::map<struct ODSL,struct Travel_time,struct std::less<struct ODSL>,class std::allocator<struct std::pair<struct ODSL const ,struct Travel_time> > > &)" (?insert@@YAMAAV?$map@UODSL@@UTravel_time@@U?$less@UODSL@@@std@@V?$allocator@U?$pair@$$CBUODSL@@UTravel_time@@@std@@@4@@std@@0@Z) referenced in function "public: double __thiscall Network::step(double)" (?step@Network@@QAENN@Z)
                      network.obj : error LNK2019: unresolved external symbol "float __cdecl insert(class std::map<struct ODSLL,struct Travel_time,struct std::less<struct ODSLL>,class std::allocator<struct std::pair<struct ODSLL const ,struct Travel_time> > > &,class std::map<struct ODSLL,struct Travel_time,struct std::less<struct ODSLL>,class std::allocator<struct std::pair<struct ODSLL const ,struct Travel_time> > > &)" (?insert@@YAMAAV?$map@UODSLL@@UTravel_time@@U?$less@UODSLL@@@std@@V?$allocator@U?$pair@$$CBUODSLL@@UTravel_time@@@std@@@4@@std@@0@Z) referenced in function "public: double __thiscall Network::step(double)" (?step@Network@@QAENN@Z)
                      release\mezzo_s.exe : fatal error LNK1120: 2 unresolved externals
                      

                      (Adding those 2 functions to day2day.cpp solves it for Windows also.)

                      So, in summary, it seems you got stuck with the project in the middle of a revision :-)

                      1 Reply Last reply
                      2
                      • SGaistS Offline
                        SGaistS Offline
                        SGaist
                        Lifetime Qt Champion
                        wrote on last edited by
                        #14

                        Besides what @hskoglund found, there's also

                        friend float operator/ (const Travel_time& lhs, const Travel_time& rhs);

                        missing in the Travel_time struct declaration.

                        On a side note, I've built the project removing the two specialized method version since they where not implemented in the first place.

                        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
                        2
                        • F Offline
                          F Offline
                          flurinus
                          wrote on last edited by
                          #15

                          Dear @hskoglund and @SGaist,

                          Thank you very much for this great support. It has helped me so much. I had further issues with getting the transit simulator work on an actual test network, but finally succeeded yesterday evening also due to help of other colleagues. It's a good thing to know that the code now runs, which will greatly simplify my further tasks :).

                          I am still a bit puzzled by the relatively unspecific kind of error (linker command error) that we were facing here, and I'll definitely keep this in mind when debugging C++ code in the future. Also, it's a bit mysterious to me how you proceeded to figure out where the error comes from in the first place, but I hope that someday I'll understand :-).

                          Thanks again and best wishes, flurinus

                          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