Я также делаю статическую библиотеку Qt (qt.4.3.3), шаги для того же:
Я загрузил открытый исходный код qt-all-opensource-src-4.3.3. Я построил статические библиотеки, используя следующие шаги. Я использую версию gcc gcc 5.2.0
cd qt-all-opensource-src-4.3.3
gmake conflcean
./configure -release -static -largefile -qt3support -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -glib -platform linux-g++-64 -confirm-license -no-openssl -no-qdbus -prefix ./static_new -prefix-install -opengl -sm -lSM -lICE -xshape -lX11 -xinerama -lXinerama -xcursor -lXcursor -xfixes -lXfixes -xrandr -lXrandr -xrender -lXrender -fontconfig -lfontconfig -tablet -lXi -xkb -glib -lglib-2.0 -lXext -lz -lgthread-2.0
gmake
gmake install
Я получаю следующее сообщение об ошибке
из ../../corelib/codecs/qsimplecodec_p.h:36,
из ../../corelib/codecs/qsimplecodec.cpp:22:
../../../include/QtCore/../../src/corelib/thread/qatomic.h: В экземпляре? QAtomicPointer :: QAtomicPointer (T *) [with T = QByteArray] ?:
../../corelib/codecs/qsimplecodec.cpp:592:74: требуется отсюда
../../../include/QtCore/../../src/corelib/thread/qatomic.h:190:7: ошибка:? init? не было объявлено в этой области, и не было найдено объявлений путем аргумент-зависимого поиска в момент создания экземпляра [-fpermissive]
../../../include/QtCore/../../src/corelib/thread/qatomic.h:190:7: note: объявления в зависимой базе? QBasicAtomicPointer? не найдены неквалифицированным поиском
../../../include/QtCore/../../src/corelib/thread/qatomic.h:190:7: note: используйте? this-> init? вместо
gmake [1]: * [.obj / release-static / qsimplecodec.o] Ошибка 1
gmake [1]: выход из каталога `/in/inndt69/Projects/oasys/QT/QT/qt-x11-commercial-src-4.3.3/qt-x11-commercial-src-4.3.3/src/tools/rcc ‘
gmake: * [sub-rcc-make_default-order] Ошибка 2
После следования предложениям Как правильно исправить ошибку сборки при создании статических библиотек Qt
Я сделал два эксперимента
1) Experiment1 : compiled the Qt4.3.3 with -fpermissive flag and I got version of libQtCore.a
2) Experiment2 : corrected the code and used this-init insted of init at line 190 and build passed
Теперь я должен сравнить объектный код, сгенерированный с двумя версиями libQtCore (из двух экспериментов). Я пытался использовать следующую команду
1) objdump -t /pathtoQt/experiment1/libQtCore.a | grep -i atomic
1) objdump -t /pathtoQt/experiment2/libQtCore.a | grep -i atomic
но я не получаю никаких ссылок на QAtomicPointer в objdumps.
Может кто-нибудь подсказать мне, как сравнить объектный код, сгенерированный с флагом -fpermissive, с исправленным кодом, который использует {this-> init (t); } в строке, которая вызывает ошибку.
Вы сталкиваетесь с ошибкой, потому что очень старый код Qt, который вы используете, не является допустимым C ++: старые компиляторы были более терпимыми и принимали этот неверный код. Вы должны исправить свою копию Qt, чтобы исправить ошибку.
Других решений пока нет …