Компилиране на Qt 5.3.2
-
Хора, помагайте.
От една седмица се мъча и не се получават нещата.Понякога ми се налага да използвам някоя "набързо написана" програма в линукс среда, но на компютър който няма нужда от видео, съответно не се инсталира графична среда и няма qt библиотеки (а и не трябва да се инсталират....). Опитвам се да компилирам 5.3.2 статично, но все едно какво правя - не се получава. Проблема е че ми трябват MySQL драйверите, но не мисля че се компилират....
Последно за компилацията ползвах това:
@
./configure -platform linux-g++-64 -prefix /opt/qt-static-5.3.2 -release -opensource -confirm-license -static -largefile -no-accessibility -qt-sql-mysql -qt-sql-sqlite -nomake examples -nomake tools -nomake tests -no-compile-examples -no-opengl -qt-xcb
@Предишни пъти ползвах и това:
@
./configure -prefix /opt/qt-static-5.3.2 -release -opensource -confirm-license -static -largefile -no-accessibility -qt-sql-mysql -qt-sql-sqlite -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -openssl-linked -qt-xcb -nomake examples -nomake tools -nomake tests -no-compile-examples -gui -no-opengl -no-dbus -reduce-relocations -no-c++11
@както и това:
@
OPENSSL_LIBS='-L/lib64 -lssl -lcrypto' ./configure -prefix /opt/qt-static-5.3.2 -release -opensource -confirm-license -static -largefile -no-accessibility -qt-sql-mysql -qt-sql-sqlite -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -openssl-linked -qt-xcb -nomake examples -nomake tools -nomake tests -no-compile-examples -gui -no-opengl -L/lib64/mysql -lmysqlclient -v -I/usr/include/openssl/ -I/usr/include/mysql/
@Винаги резултата е един и същ - при компилацията на фреймуорка няма грешки, компилирам програмата - също без грешки, ъплоудвам я на отдалечения компютър и при опита си да я пусна се оплаква че не намира libmysqlclient.so.18. При 4.8.6 нямах тези проблеми - един път компилиран статично всичко беше ток. Реших се на "ъпгрейд" но май ще се връщам към четворката ако не мога да го оправя това :(
Компютъра на който компилирам е 64 битова Федора 20 с инсталирани mariadb-devel, mariadb-libs, etc другите мариадб пакети. openssl-devel също е инсталиран, но да речем че мога да преживея липсата на SSL ако мога да пускам програмите локално (а не да правя отдалечена ССЛ връзка). Имам инсталирани libgcc, gcc-c++ и gcc - всичките 4.8.3-7
Използвам qt-everywhere-opensource-src-5.3.2.tar.gz -
Изглежда че проблема е друг, ще трябва да проверявам още, но това което пробвах - в предния пост първия ред с параметри на configure. След като се компилира и инсталира, билднах програмата, проверих с ldd какви библиотеки иска - нямаше нито една от Qt. Ъплоуднах програмата с всички библиотеки които екзекютъбала търсеше, и стартирах програмата като промених LD_LIBRARY_PATH по следния начин
@
LD_LIBRARY_PATH=$(pwd) ./mysqltest
@По този начин, след като си търси библиотеките в директорията от където е стартирана, принципно не би трябвало да трябва нищо повече. За съжаление, както написах в първия пост, компилирам на Федора 20, а сървъра на който се опитвам да пусна нещо е ЦентОС 5.4 (който отдавна трябваше да е командирован за постоянно...). При стартирането на приложението там, след като е било компилирано със статичните библиотеки, извежда съобщението:
@
libstdc++.so.6: ELF file OS ABI invalid
@Ако компилирам с динамичните библиотеки, първото нещо за което се оплаква е libQt5Sql.so.5
Така или иначе проблема с вграждането на mysql седи, тъй като дори след последния "успех" пак си търси libmysqlclient.so.18. Тук там из нета чета че и други хора има с подобни проблеми, като цяло версии от 5.1 нагоре трудно се компилират статично. Съответно се задава и въпроса - при положение че mariadb е изцяло опен сорс, защо не се слага готова вградена поддръжка, вместо да трябва допълнително да се компилира mysql.Ако някой може да помогне, пишете! Аз междувременно ще пробвам на по- стара система (с по- ранен libstdc++) и вероятно по- ранна версия на Qt, последната 4.8 може би.
-
Когато човек е изморен не мисли трезво и прави новобрански грешки....
Не е далече от акъла да проверя че компилираната програма не е статична/монолитна, още повече при положение че търси системни динамични библиотеки. Едно от нещата които не включвах в кода, или по- точно в конфигурацията на проекта в *.pro файла е QMAKE_LFLAGS. В CONFIG съм сложил static, но това явно не е достатъчно вече, така че трябва да се подаде QMAKE_LFLAGS += -static и може би -static-libgcc ако искаме да се включи и това.
След тази манипулация ми изплю нови 20 грешки, но там вече проблема е от липсата на статичните библиотеки, нещо което се решава с теглене на съответните пакети или прекомпилиране с изключване на излишното (като ICU примерно...).
Поради някаква причина mariadb-libs във Федора 20 не включва libmysqlclient.a, че трябваше да тегля последната mariadb и от там да вземам библиотеката само (иначе ще си потроша системата и няма да мога да си ползвам мейл клиента :D )
Както и да е, надявам се това да е последното прекомпилиране и дано тези "бележки" да помогнат и на някой друг ;-)