c ++ - Linking Qt5.6 giver fejl ved ikke at finde krævede referencer

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at udvide et eksisterende CfP-projekt med Cfp-Q1 (Qt 5.6.0, fordi jeg ikke kan stole på Cxx11-funktioner). Problemet er, at jeg ikke kan få Qt til at forbinde korrekt. Jeg vil gerne bygge en X86-applikation (32bit) under Win7 (x86-64). Jeg har installeret qt-opensource-windows-x86-mingw492-5.6.0.exe hentet fra Qt download siden https://download.qt.io/archive/qt/5.6/5.6.0/. Alt kompilerer. Men sammenkædning giver følgende fejl: [4]



  C:/sofit/inuit\_workspace/inuit\_development/tools/makefiles/inuit/MakefileCatenaISS.mk: 145:
  Opskrift på mål 'build/model/model.exe' mislykkedes

  
  C:/sofit/inuit\_workspace/inuit\_development/tools/inuit/inuit.cpp: 175:
  Udefineret reference til `\_imp\_\_\_ZN12QApplicationC1ERiPPci'

  
  C:/sofit/inuit\_workspace/inuit\_development/tools/inuit/inuit.cpp: 176:
  udefineret reference til
  `\_imp\_\_\_ZN7QWidgetC1EPS\_6QFlagsIN2Qt10WindowTypeEE'

  
  C:/sofit/inuit\_workspace/inuit\_development/tools/inuit/inuit.cpp: 180:
  undefined reference til `\_imp\_\_\_ZN7QWidget4showEv '

  
  C:/sofit/inuit\_workspace/inuit\_development/tools/inuit/inuit.cpp: 181:
  Udefineret reference til `\_imp\_\_\_ZN12QApplication4execEv'

  
  C:/sofit/inuit\_workspace/inuit\_development/tools/inuit/inuit.cpp: 307:
  undefined reference til `\_imp\_\_\_ZN12QApplicationD1Ev'

  
  C:/sofit/inuit\_workspace/inuit\_development/tools/inuit/inuit.cpp: 307:
  undefined reference til `\_imp\_\_\_ZN12QApplicationD1Ev'

  
  collect2.exe: error: ld returnerede 1 exit status

  
  lav: *** [[build/model/model.exe]] Fejl 1



Jeg bruger følgende kommando til at linke:


C:QtQt5.6.0Toolsmingw492\_32ing++.exe -g
-LC:QtQt5.6.05.6mingw49\_32lib -lQt5Widgets -lQt5Core -lQt5Gui -lQt5Cored -lQt5Guid -lQt5Widgetsd -lqtmain -lqtmaind -o build/model/model.exe  ./build/model/objects/a.obj  ./build/model/objects/b.obj


Jeg har tilføjet en masse biblioteker og forskellige kombinationer. Alene ved hjælp af Widgets, Core og Gui gør heller ikke det trick.


Potentielle årsager identificeret i svar i relaterede spørgsmål (se nedenfor) rettet mod
- Afvikle arkitekturen lib/compiler
- Mangler -lQt5Widgets


Jeg tror imidlertid ikke, at dette gælder her. Bemærk venligst, at jeg ikke bruger CMake eller QMake (dermed ingen .pro fil eller CMake filer) - bare ren Gnu ringe indenfor Eclipse Mars.


Kilden (i tilfælde af interesse):


int main(int argc, char *argv[])
    QApplication app(argc, argv);
    QWidget *widget = new QWidget;
    Ui\_MainWindow ui;
    widget->show();
    return app.exec();
}


Og kompilator kommandoen (i tilfælde af interesse):


C:QtQt5.6.0Toolsmingw492\_32ing++.exe -IC:QtQt5.6.05.6mingw49\_32include -IC:/my\_project -Wall -g -c -DWIN32 -DUNICODE -DQT\_LARGEFILE\_SUPPORT -DQT\_DLL -DQT\_GUI\_LIB -DQT\_CORE\_LIB -DQT\_HAVE\_MMX -DQT\_HAVE\_3DNOW -DQT\_HAVE\_SSE -DQT\_HAVE\_MMXEXT -DQT\_HAVE\_SSE2 -DQT\_THREAD\_SUPPORT   C:/my\_project/1.cpp  -o C:/my\_project/build/model/objects/1.obj


Jeg har prøvet det med/uden Qt symbolerne.


Ved der nogen, hvad der kan være problemet?


Relaterede:



  • Kompilering af Qt5 hej verden .cpp-fil under Windows ved hjælp af MinGW-w64 giver fejl i 'undefined reference'

  • C ++ Qt: Udefineret reference til `\_imp \_\_\_ ZN12QApplicationC1ERiPPci '

  • Kompilering af Qt5 hej verden .cpp-fil under Windows ved hjælp af MinGW-w64 giver fejl i 'undefined reference'

  • http://www.qtcentre.org/archive/index.php/t-34997.html

  • Qt5 linkfejl



Enhver hjælp er meget værdsat. [8]

Bedste reference


Der er netop en måde at få det til at arbejde uden at spilde meget tid:



  1. Brug qmake til at generere en Makefile til dit projekt.

  2. Sørg for, at den bygger.

  3. Rengør Makefile efter behov, hvis det ønskes.



Du er selvfølgelig fri til at holde regenerering af Makefile ved hjælp af qmake, når du ændrer dine kilder. Det vigtigste, du vil finde ud af, er, at vedligeholdelse af makefiles manuelt er en kongelig smerte, da du også behøver at opretholde afhængighedslisterne, og det kræver rekursivt scanning af filer inkluderet af hver oversættelsesenhed. Med andre ord, uanset Makefiles du kommer op med dig selv, vil ikke projektet genopbygge projektet korrekt, når du ændrer det. Således vil du overlade fordelene ved Makefile i løbet af udviklingsprocessen. De fleste manuelt genererede Makefiles mangler stort set de rette afhængigheder af hver kildefil - fordi ingen sane vil manuelt opretholde det, og når du 'vedligeholder det automatisk' kan lige så godt bruge qmake eller cmake til at udføre jobbet.


Endelig er der ikke noget som Qt, der ikke har qmake, så det er ikke dumt at bruge qmake. Hvis du er afhængig af Qt, gør du ikke noget lettere ved at foregive at qmake ikke er der: dit projekt vil bruge mange andre binære værktøjer, som Qt giver alligevel, så giver qmake en særlig status, spilder bare din tid. Hvis dit projekt bliver stort, sparer du meget byggetid ved at bruge cmake med ninjageneratoren i stedet, da qmake i øjeblikket sidder fast, genererer rekursive Makefiles, og de fører til dårlig byggeprestation.