2016-12-16 1 views
1

Lorsque l'on veut lier statiquement toutes les bibliothèques disponibles en utilisant g ++, cette personne passe l'indicateur -static au compilateur.Comment forcer les bibliothèques à lier statiquement dans le créateur qt

Mais comment le faire à partir de Qt Creator?

Tout d'abord, j'ai essayé ce conseil: How to make Qt and Qtcreator link the libraries statically instead of dynamic?

Le poste suggère d'utiliser

CONFIG += static 

Mais cela ne fonctionne tout simplement pas.

Deuxièmement, j'ai essayé une autre approche et a ajouté la ligne suivante dans mon fichier .pro:

QMAKE_CXXFLAGS += -static 

Cela ne résout pas le problème non plus. J'ai analysé la sortie du compilateur et découvert:

-static est ajouté uniquement lors de la compilation de sources pour objets fichiers. Mais lors de la construction de l'exécutable, ce drapeau est absent.

Voici le compilateur exact des commandes que je copiais de l'onglet de sortie du compilateur:

g++ -c -pipe -fno-keep-inline-dllexport -static -g -std=gnu++11 -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_QML_DEBUG -I..\..\..\ASSETS\PROG_CPP\MY_CPP\2016\test -I. -I..\..\..\icu\dist\include -I..\..\5.7\mingw53_32\mkspecs\win32-g++ -o debug\main.o ..\..\..\ASSETS\PROG_CPP\MY_CPP\2016\test\main.cpp 
g++ -Wl,-subsystem,console -mthreads -o debug\test.exe debug/main.o -LC:\icu\dist\lib -lsicuio -lsicuin -lsiculx -lsicule -lsicuuc C:\icu\dist\lib\sicudt.a -lpthread -lm 

Comment forcer Qmake ajouter -static à toutes les commandes?

Répondre

2

La solution était assez évidente, comme je l'ai découvert plus tard. Il existe une variable spéciale dans Qmake qui est responsable des indicateurs de liens: QMAKE_LFLAGS. Donc, tout ce que je devais faire est d'ajouter ce qui suit au fichier .pro:

QMAKE_LFLAGS += -static 
+0

Il n'est pas utile dans mon cas, mais ceci: 'unix: LIBS + = -Wl, -Bstatic -l - Wl, -Bdynamic' est ok – dyomas

+0

Sur Windows je reçois l'option non reconnue/statique – jjxtra