Кампіляцыі QT прыкладанняў LINUX

Бібліятэка Qt дазваляе рабіць сапраўды кросплатформавыя прыкладання. Аднойчы напісаны код можна адкампіляваць пад многія аперацыйныя сістэмы. Але праблема менавіта ў слове «кампіляваць», бо маецца на ўвазе, што неабходна перазагрузіцца пад мэтавую сістэму, мець у ёй наладжаную асяроддзе распрацоўкі, усталяваны і настроены заапарк бібліятэк. Ратуе крос-кампіляцыя - кампіляцыя, якая вырабляе выкананы код для платформы, выдатнай ад той, на якой выконваецца.

Крос-кампіляцыя для Windows 64

Звычайна адной з найбольш запатрабаваных праблем з'яўляецца зборка Windows-версіі свайго прыкладання, першапачаткова распрацоўваўся пад Linux. Прыклад вырашэння гэтай праблемы можна ўбачыць тут або на расейскай. Неабходна стварыць mkspecs-канфігурацыю, пакласці файлы Qt у адпаведныя дырэкторыі і ўсё. Кампіляваць Qt ў такім выпадку не абавязкова, можна спампаваць бінарнікі з афіцыйнага сайта.

У такога падыходу ёсць некалькі мінусаў: 1) QtCreator пра ўсталяваную такім чынам бібліятэцы нічога не ведае; 2) Афіцыйнай зборкі Qt для Windows x64 не існуе. І калі з першай праблемай яшчэ неяк можна змагацца, то супраць другой дапаможа толькі кампіляцыя ...

Перад крос-кампіляцыяй не забудзьцеся паставіць непасрэдна сам крос-кампілятар (шукаецца ў пакетам мэнэджару па назве «mingw»). І спампаваць зыходнікі qt-everywhere з афіцыйнага сайта. У дырэкторыі mkspecs распакаваць архіў капіюем тэчку win32-g ++ ў win64-x-g ++ і карэктуем змесціва файла qmake.conf . У мяне атрымалася наступнае:

Па сутнасці ў файле спецыфікацыі былі заменены толькі шляху.

Я выконваў configure з наступнымі параметрамі:

./configure -xplatform win64-x-g++ CROSS_COMPILE=x86_64-w64-mingw32- -prefix /usr/local/qt4win64 -no-webkit -no-phonon -no-phonon-backend -no-script -no-scripttools -no-multimedia -no-qt3support -fast -nomake demos -nomake examples -nomake tools -device-option -little-endian -qt-zlib -qt-libpng -qt-libjpeg -openssl-linked -no-fontconfig -no-3dnow -no-ssse3 -continue

Тут збіраю мінімальную версію Qt без webkit, phonon, multimedia і да т.п. Поўны спіс опцый можна паглядзець па камандзе ./configure -help

Адпаведна, для такой зборкі павінен быць усталяваны пакет g ++ - mingw-w64-x86-64 , які змяшчае ў сабе x86_64-w64-mingw32- g ++ (у убунту пакет трэба ставіць асобна).

Далей make && sudo make install . На першым этапе кампіляцыі выкарыстоўваецца роднай сістэмны кампілятар, ён збірае неабходныя утыліты для linux, якія будуць выкарыстоўвацца для зборкі ўжо windows-бінарнікаў.

Пасля ўстаноўкі ў мяне ў / usr / local / qt4win64 / bin ляжаць PE32 + DLL і некалькі ELF 64-bit LSB executable, у тым ліку: qmake, uic, moc, rcc . Вось яны то і спатрэбяцца для QtCreator!

Пасля ўстаноўкі ня выдаляйце распакаваць дырэкторыю - яна выкарыстоўваецца.

Крос-кампіляцыя для Windows 32

Аналагічная кампіляцыі для Win64. За выключэннем таго, што ёсць афіцыйная зборка, і саму бібліятэку кампіляваць ня трэба! Дастаткова сабраць qmake, uic, moc, rcc .

налады:

qmake.conf

Крос-кампіляцыя для Mac OS X

Крос-кампіляцыя для маку таксама вельмі падобная, за выключэннем таго, што трэба будзе сабраць і кампілятар. Я збіраў па гэтай інструкцыі. Гэта адняло поўны дзень часу і кучу нерваў. У працэсе будзе патрэбна рабочая Mac OS X (як мінімум на віртуальнай машыне) з усталяваным XCode, каб забраць адтуль неабходныя файлы. Пры компилировании сваіх Qt-прыкладанняў запушчаная Mac OS X не патрэбна.

налады:

qmake.conf:

Памятаеце, у Mac OS X для лінковкі з бібліятэкай .a -файлы не патрэбныя.

Настройка QtCreator

Спачатку трэба дадаць у спіс ўсе ўстаноўленыя кампілятары. Інструменты - Параметры - Зборка і запуск - Інструментар:

QtCreator звычайна нармальна вызначае ABI, але лепш пераправерыць. Гэтак жа можна заўважыць, што сістэмны x64 GCC ў linux ўмее генераваць і 32-бітныя прыкладанні. Аднак гэта не адмяняе таго, што таксама неабходныя 32-бітныя версіі бібліятэк.

Пасля кампілятараў можна дадаць профілі Qt:

Вось пры даданні профілю і спатрэбяцца сабраныя раней qmake, uic, moc, rcc , бо трэба выбраць каталог з qmake . Жоўты значок з клічнікам злева ад профілю азначае warning, але QtCreator можа выкарыстоўваць такі профіль Qt. А вось калі значок чырвоны, то профіль нерабочы. Такое можа здарыцца пры няправільнай структуры каталогаў. Або калі выдаліць дырэкторыю, у якой кампіляваць Qt.

Наладзіць кампутар трэба рабіць у кожным ствараемым праекце.

Для дадання канкрэтнага профілю Qt трэба пры актыўным праекце зайсці на ўкладку «Культура» (Ctrl + 5):

Па змаўчанні ў спісе «Зьмяніць канфігурацыю зборкі» ёсць толькі сістэмны профіль Qt. Затое ў спісе кнопкі «Дадаць» ёсць усе профілі Qt, дададзеныя ў параметры зборкі.

У асноўных наладах зборкі неабходна праверыць пару бібліятэка-кампілятар. Каб і тое, і другое было ад адной і той жа аперацыйнай сістэмы.

Этапы зборкі «qmake» і «Зборка» QtCreator ставіць па змаўчанні. А вось асаблівыя этапы «upx» і «dmgbuild» я дадаў ўручную для свайго праекту. Этап «upx» выконваецца кожны раз пры націску на кнопку «Сабраць праект». Аднак калі выкананы файл ня быў зьменены, то upx верне памылку, што файл ім ужо апрацаваны. У выпадку памылкi наступны этап ня выклікаецца, г.зн. dmg-файл абновіцца толькі калі upx адпрацаваў паспяхова.

Чытай яшчэ:   ЯК СТВАРЫЦЬ два акаўнта ў скайпе

Для працы этапу upx ён павінен быць усталяваны ў сістэме. Аднак нават працуючы ў linux-асяроддзі і пастаўлены з пакетнага мэнэджара upx ўмее уціскаць прыкладання: linux32 / 64, win32, macos32 / 64. Далёка не для ўсіх праектаў upx-сціск рэальна трэба, этап паказаны хутчэй для прыкладу.

Для этапу «dmgbuild» я скарыстаўся скрыптам make_dmg. Яму патрэбныя правы root , таму дадаў скрыпт ў файл / etc / sudoers

Змены ў праектным файле і выкарыстанне іншых бібліятэк

У маім праекце выкарыстоўваецца libusb , а гэта далёка не частка Qt. Таксама неабходна было ўключыць платформенныя-залежную рэалізацыю HID. У праектны файл былі дададзены радкі:

macx {
INCLUDEPATH += $$PWD/libusbx/
SOURCES += BootLoader/HIDAPI/mac/hid.c
LIBS += -framework IOKit -framework CoreFoundation -lusb-1.0
ICON = AqPicFlash.icns
}

win32: {
INCLUDEPATH += $$PWD/libusbx/
LIBS += -lsetupapi -lole32
SOURCES += BootLoader/HIDAPI/windows/hid.cpp
RC_FILE = WinIcon.rc
}

win32: !win64-x-g++ {
LIBS += -L$$PWD/libusbx/ -lusb-1.0-32.dll
}

win64-x-g++ {
LIBS += -L$$PWD/libusbx/ -lusb-1.0-64.dll
}

unix: !macx {
CONFIG += link_pkgconfig
PKGCONFIG += libusb-1.0
SOURCES += BootLoader/HIDAPI/linux/hid-libusb.c
}

У Mac OS X і Linux линкуемся з сістэмнай libusb, у Windows у залежнасці ад разраднасці линкуемся з libusb-1.0-32.dll.a або libusb-1.0-64.dll.a . Памятаем, што .a -файл можа быць перайменаваны, але залежаць прыкладанне ўсё-роўна будзе ад libusb-1.0.dll . У Linux параметры для libusb бярэм праз сістэмную ўтыліту pkgconfig. Акрамя libusb падлучальны для кожнай аперацыйнай сістэмы неабходныя сістэмныя бібліятэкі і абразкі.

Зручна разнесці выніковыя файлы для розных аперацыйных сістэм па дырэкторый. Зрабіць гэта можна так:

macx {
DESTDIR = mac
OBJECTS_DIR = mac
MOC_DIR = mac
UI_DIR = mac
RCC_DIR = mac
}

unix: !macx {
DESTDIR = linux
OBJECTS_DIR = linux
MOC_DIR = linux
UI_DIR = linux
RCC_DIR = linux
}

win32 {
DESTDIR = windows/release
OBJECTS_DIR = windows
MOC_DIR = windows
UI_DIR = windows
RCC_DIR = windows
}

win64-x-g++ {
DESTDIR = win64/release
OBJECTS_DIR = win64
MOC_DIR = win64
UI_DIR = win64
RCC_DIR = win64
}

Мэта win64-x-g ++ адносіцца да win32 , аднак у праектным файле ідзе апошняй і перапісвае налады.

вынік

Зараз каб сабраць прыкладанне пад тую ці іншую аперацыйную сістэму досыць абраць тып зборкі, як паказана на самым першым скрыншоце, і націснуць «Сабраць праект»

QT кампіляцыя з WINDOWS ПАД LINUX

Добры дзень.

Праекты пад QT рэалізую ў QTCReator'e. Пакуль што працаваў пад Windows, цяпер неабходна маю праграму перастварыць пад Linux. Як гэта рабіць правільна?

Самае простае што ў галаву прыйшло - гэта паставіць на Linux QTCreator, і з Windows машыны, дзе я першапачаткова праграмаваў, перанесці мой праект на Linux машыну, адкрыць яго ў Linux версіі QTCreator'a, і проста перакампіляваць. На простым праекце проэкперементировал - у цэлым атрымалася (натуральна, пад Linux прыйшлося стварыць свае налады зборкі, такія як профіль QT, налады кампілятара і г.д. Але як то не прыгожа ўвесь час татачку з зыходным кодам туды сюды цягаць.

Як правільна арганізаваць кросплатформеннага працу з праектам для QT, выкарыстоўваючы QTCReator? І асабліва, для групы распрацоўшчыкаў?

Добры дзень, Grizzli, Вы пісалі:

G> Як правільна арганізаваць кросплатформеннага працу з праектам для QT, выкарыстоўваючы QTCReator? І асабліва, для групы распрацоўшчыкаў?

Юзайте якой-небудзь svn або тыпу таго. Чекаут або апдэйт і білд.

Добры дзень, Brice Tribbiani, Вы пісалі:

BT> Добры дзень, Grizzli, Вы пісалі:

G >> Як правільна арганізаваць кросплатформеннага працу з праектам для QT, выкарыстоўваючы QTCReator? І асабліва, для групы распрацоўшчыкаў?

BT> Юзайте якой-небудзь svn або тыпу таго. Чекаут або апдэйт і білд.

Гэта зразумела, але мяне перш за ўсё напружвае сама необходиомость раздзельнай зборкі на розных кампутарах (на Віндовс - пад Віндовс, на лінуксе - соотвественнос пад Лінкус). Нельга зборку арганізаваць цэнтралізавана?

G> Гэта зразумела, але мяне перш за ўсё напружвае сама необходиомость раздзельнай зборкі на розных кампутарах (на Віндовс - пад Віндовс, на лінуксе - соотвественнос пад Лінкус). Нельга зборку арганізаваць цэнтралізавана?

на жаль няма!

Добры дзень, Вертер, Вы пісалі:

G >> Гэта зразумела, але мяне перш за ўсё напружвае сама необходиомость раздзельнай зборкі на розных кампутарах (на Віндовс - пад Віндовс, на лінуксе - соотвественнос пад Лінкус). Нельга зборку арганізаваць цэнтралізавана?

Чытай яшчэ:   УСТАНАВІЦЬ рускай версіі мазіла

У> на жаль, няма!

я сустракаў у інтэрнэце артыкула (састарэлыя), што людзі на лінуксе ставяць mingw, і настройваюць тоолчейн ў QTCReatore, для кампіляцыі пад Віндовс. хто небудзь з гэтым сталиквался асабіста? мае сэнс затлумляцца?

Добры дзень, Grizzli, Вы пісалі:

G> я сустракаў у інтэрнэце артыкула (састарэлыя), што людзі на лінуксе ставяць mingw, і настройваюць тоолчейн ў QTCReatore, для кампіляцыі пад Віндовс. хто небудзь з гэтым сталиквался асабіста? мае сэнс затлумляцца?

Асабіста не сутыкаўся, але не ўпэўнены, што ёсць сэнс затлумляцца. Я не моцны ў пытанні, нижеописанное проста палёт думкі:

Напрыклад, вы хочаце з пад linux скампіляваць пад win, linux, mac.

Linux - тут усё зразумела

Win - гэта трэба ставіць mingw, які здолее падчапіць Windows SDK (а калі захочаце выкарыстоўваць msvc)

Mac - тое самае (што там пад яго ў якасці sdk ідзе?)

У нас, на практыцы, на кожнай платформе 1 раз наладжваецца environment, а ў якасці білд-сістэмы выкарыстоўвалі CMake. Г.зн. не было ніякай практычнай неабходнасці ў самім праекце нешта падтрымліваць пад спецыфічныя платформы.

ЗБОРКА І кампіляцыі ПАД LINUX

Усе праграмы для кампутара ўяўляюць сабой набор каманд працэсара, якія складаюцца з пэўнага набору біт. Гэтых каманд некалькі сотняў і з дапамогай іх выконваюцца ўсе дзеянні на вашым кампутары. Але пісаць праграмы непасрэдна з дапамогай гэтых каманд складана. Таму былі прыдуманы розныя мовы праграмавання, якія прасцей для ўспрымання чалавеку.

Для падрыхтоўкі праграмы да выканання, спецыяльная праграма збірае яе з зыходнага кода на мове праграмавання ў машынны код - каманды працэсара. Гэты працэс называецца кампіляцыя. Linux - гэта свабоднае праграмнае забеспячэнне, а таму зыходныя коды праграм даступныя ўсім жадаючым. Калі праграмы няма ў рэпазітары ці вы хочаце зрабіць нешта нестандартнае, то вы можаце выканаць кампіляцыю праграмы.

У гэтым артыкуле мы разгледзім, як выконваецца кампіляцыя праграм Linux, як адбываецца працэс кампіляцыі, а таксама разгледзім наколькі гнутка вы зможаце ўсё наладзіць.

падрыхтоўка сістэмы

Мы будзем кампіляваць праграмы, напісаныя на Сі ці З ++, так як гэта найбольш выкарыстоўваецца мова для праграм, якія патрабуюць кампіляцыі. Мы ўжо трохі разглядалі гэтую тэму ў артыкуле ўстаноўка з tar.gz ў Linux, але той артыкул арыентавана больш на пачаткоўцаў, якім трэба не столькі разабрацца, колькі атрымаць гатовую праграму.

У гэтым жа артыкуле тэма разгледжана больш дэталёва. Як вы разумееце, для ператварэння зыходнага кода ў каманды працэсара трэба адмысловае праграмнае забеспячэнне. Мы будзем выкарыстоўваць кампілятар GCC. Для ўстаноўкі яго і ўсіх неабходных інструментаў у Ubuntu запусціўшы каманду:

sudo apt install build-essential manpages-dev git automake autoconf

compiling6

Затым вы можаце праверыць, ці правільна ўсталяваны і версію кампілятара:

 gcc --version

compiling5

Але перад тым як пераходзіць да самай кампіляцыі праграм разгледзім больш падрабязна складнікі гэтага працэсу.

Як выконваецца кампіляцыя?

Кампіляцыя праграмы Linux - гэта даволі складаны працэс. Усё яшчэ складаней, таму што код праграмы змяшчаецца не ў адным файле і нават не ва ўсіх файлах яе зыходнікаў. Кожная праграма выкарыстоўвае мноства сістэмных бібліятэк, якія ўтрымліваюць стандартныя функцыі. Да таго ж адзін і той жа код павінен працаваць у розных сістэмах, якія змяшчаюць розныя версіі бібліятэк.

На першым этапе, яшчэ да таго як пачнецца непасрэдна кампіляцыя, спецыяльны інструмент павінен праверыць сумяшчальная Ці ваша сістэма з праграмай, а таксама ці ёсць усе неабходныя бібліятэкі. Калі чаго-небудзь няма, то будзе выдадзена памылка і вам прыйдзецца ліквідаваць праблему.

Далей ідзе сінтаксічны аналіз і пераўтварэнне зыходнага кода ў аб'ектны код, без гэтага этапу можна было б і абыйсціся, але гэта неабходна, каб кампілятар мог выканаць розныя аптымізацыі, зрабіць памер канчатковай праграмы менш, а каманды працэсара больш эфектыўна.

Затым усе аб'ектныя файлы збіраюцца ў адну праграму, звязваюцца з сістэмнымі бібліятэкамі. Пасля завяршэння гэтага этапу праграму застаецца толькі ўсталяваць у файлавую сістэму і ўсё. Вось такія асноўныя фазы кампіляцыі праграмы, а цяпер пяройдзем бліжэй да практыкі.

Кампіляцыя праграм Linux

Першае што нам спатрэбіцца - гэта зыходнікі самой праграмы. У гэтым прыкладзе мы будзем збіраць самую апошнюю версію vim. Гэта цалкам нейтральная праграма, досыць простая і патрэбная ўсім, таму яна выдатна падыдзе для прыкладу.

атрыманне зыходнікаў

Першае што нам спатрэбіцца, гэта зыходныя коды праграмы, якія можна ўзяць на GitHub. Вы можаце знайсці зыходнікі для большасці праграм Linux на GitHub. Акрамя таго, там жа ёсць інструкцыі па зборцы:

Чытай яшчэ:   КАК СКАЧАЦЬ ПРАГРАМУ WORD EXEL

compiling7

Давайце загрузім самі зыходнікі нашай праграмы з дапамогай утыліты git:

git clone https://github.com/vim/vim

compiling8

Таксама, можна было спампаваць архіў на сайце, і затым распакаваць яго ў патрэбную тэчку, але так будзе зручней. Ўтыліта створыць тэчку з імем праграмы, нам трэба зрабіць яе рабочай:

cd vim

Настройка configure

Далей нам трэба запусціць скрыпт, які праверыць нашу праграму на сумяшчальнасць з сістэмай і наладзіць параметры кампіляцыі. Ён завецца configure і пастаўляецца распрацоўшчыкамі праграмы разам з зыходнікамі. Увесь працэс кампіляцыі апісаны ў файле Makefile, яго будзе ствараць гэтая ўтыліта.

Калі configure няма ў тэчцы з зыходнікамі, вы можаце паспрабаваць выканаць такія скрыпты каб яго стварыць:

./bootstrap

$ ./autogen.sh

Таксама для стварэння гэтага скрыпту можна скарыстацца утылітай automake:

aclocal

$ autoheader

$ automake --gnu --add-missing --copy --foreign

$ autoconf -f -Wall

Ўтыліта automake і іншыя з яе набору генеруюць неабходныя файлы на аснове файла Mackefile.am. Гэты файл абавязкова ёсць у большасці праектаў.

Пасля таго як вы атрымалі configure мы можам пераходзіць да налады. Адным з велізарных плюсаў ручной зборкі праграм ёсць тое, што вы можаце самі выбраць з якімі опцыямі збіраць праграму, дзе яна будзе размешчана і якія дадатковыя магчымасці варта ўключыць. Усё гэта наладжваецца з дапамогай configure. Поўны набор опцый можна паглядзець, выканаўшы:

./configure --help

compiling1

Разгледзім найбольш часта выкарыстоўваюцца, стандартныя для ўсіх праграм опцыі:

  • -Prefix = PREFIX - папка для ўстаноўкі праграмы, замест /, напрыклад, можа быць / usr / local /, тады ўсе файлы будуць распаўсюджаны не па асноўнай файлавай сістэме, а в / usr / local;
  • -Bindir = DIR - тэчка для размяшчэння выкананых файлаў, павінна знаходзіцца ў PREFIX;
  • -Libdir = DIR - папка для размяшчэння і пошуку бібліятэк па змаўчанні, таксама ў PREFIX;
  • -Includedir = DIR - тэчка для размяшчэння man старонак;
  • -Disable-магчымасць - адключыць паказаную магчымасць;
  • -Enable-магчымасць - уключыць магчымасць;
  • -With-бібліятэка - падобна enable актывуе паказаную бібліятэку ці загалоўкавыя файл;
  • -Without-бібліятэка - падобнае disable адключае выкарыстанне бібліятэкі.

Вы можаце выканаць configure без опцый, каб выкарыстоўваць значэнні па змаўчанні, але таксама можаце ўручную паказаць патрэбныя шляху. У нашым выпадку ./configure ёсць, і мы можам яго выкарыстоўваць:

./configure

compiling2

Падчас налады ўтыліта будзе правяраць, ці ёсць усе неабходныя бібліятэкі ў сістэме, і калі няма, вам прыйдзецца іх усталяваць ці адключыць гэтую функцыю, калі гэта магчыма. Напрыклад, можа ўзнікнуць такая памылка: no terminal library found checking for tgetent () ... configure: error: NOT FOUND!

compiling3

У такім выпадку нам неабходна ўсталяваць патрабаваную бібліятэку. Напрыклад, праграма прапануе ncurses, таму ставім:

sudo apt install libncurces-dev

Прыстаўка lib заўсёды дадаецца перад бібліятэкамі, а -dev - азначае, што нам патрэбна бібліятэка з усімі загалоўкавымі файламі. Пасля задавальнення ўсіх залежнасцяў налада пройдзе паспяхова.

зборка праграмы

Калі налада будзе завершана і Makefile будзе гатовы, вы зможаце перайсці непасрэдна да зборкі праграмы. На гэтым этапе выконваецца непасрэдна пераўтварэнне зыходнага кода ў машынны. Ўтыліта make на аснове Makefile зробіць усе неабходныя дзеянні:

make

compiling4

Далей засталося ўсталяваць саму праграму, калі вы выкарыстоўвалі опцыю prefix, каб не ўсталёўваць праграму ў асноўную файлавую сістэму, то можна ўжыць стандартную опцыю make:

make install

Пасля гэтага праграма будзе ўстаноўлена ў паказаную вамі тэчку, і вы зможаце яе выкарыстаць. Але больш правільны шлях - ствараць пакет для ўстаноўкі праграмы, гэта робіцца з дапамогай утыліты checkinstall, яна дазваляе ствараць як deb, так і rpm пакеты, таму можа выкарыстоўвацца не толькі ў Ubuntu. Замест make install запусціўшы каманду:

checkinstall

Затым проста ўсталюйце атрыманы пакет з дапамогай dpkg:

sudo dpkg install vim.deb

Пасля гэтага зборка праграмы цалкам завершана і ўстаноўлена, так што вы можаце пераходзіць да паўнавартаснага выкарыстання.

Калі вы ўсталёўвалі праграму з дапамогай make install, то выдаліць яе можна выканаўшы ў той жа тэчцы зваротную каманду:

sudo make uninstall

Каманда выдаліць усе файлы, якія былі скапіяваныя ў файлавую сістэму.

У гэтым артыкуле мы разгледзелі, як выконваецца кампіляцыя праграмы Linux. Гэты працэс можа быць складаным для пачаткоўцаў, але ў цэлым, усё магчыма, калі выдаткаваць на рашэнне задачы некалькі гадзін. Калі ў вас засталіся пытанні, пытайцеся ў каментарах!

На завяршэнне відэа пра тое, што такое кампілятар і інтэрпрэтатар:

Чытай на іншых мовах

 беларускіанглійская Нямецкі іспанскі французскі італьянскі партугальская турэцкі арабская ўкраінскі шведскі венгерская балгарскі эстонскі Кітайскі (спрошчаны) в'етнамская румынская тайская славенская славацкая сербская малайская нарвежская латышская Літоўскі карэйская японскі інданезійская хіндзі іўрыт фінскі грэцкі нідэрландская чэшскі дацкая харвацкая Кітайскі (традыцыйны) тагальская урду Азейбарджанский армянскіпольскі бенгальская грузінскі казахскі каталонская Mongolski руская Таджитский Tamil'skij тэлугу Узбецкий

дадаць каментар

Ваш e-mail не будзе апублікаваны. Абавязковыя палі пазначаныя *