Компилиране на x86 приложение на x64 платформа



  • Здравейте. Инсталирам си Qt 5.2.0 for Windows 64-bit (VS 2012, 590 MB). Правя си някакъв проект и съответно го компилирам. Преди обаче да го компилирам какви настройки трябва да направя на QtCreator-а (или qmake файла, може би) за да build-не приложението така че да е съвместимо и с 32, и с 64 битови машини?

    Благодаря предварително!



  • Във .pro файла на проекта си добави
    @
    QMAKE_SPEC = win32-msvc2012
    @

    Не съм сигурен дали това е правилния specs файл, провери какво имаш на системата си. Аз ползвам крос компилатор от 64 битов линукс или 32 битов XP с mingw, съответно QMAKE_SPEC при мен е win32-g++ на крос компилатора и нищо допълнително на уиндоуса.

    Ако искаш да правиш само 32 битови приложения, въпросния mkspecs можеш да го добавиш в настройките на Qt Creator - Build & Run, Kits (намира се най- долу на прозореца след като избереш някой от китовете). Разбира се, можеш да си направиш нов кит и да добавиш там mkspecs, че да имаш и за 32 и за 64 битово компилиране китове.



  • Благодаря за полезната информация. Обаче ми е интересно след като има такава команда, има ли вариант да се билдват два типа приложения - x86 съответно в папка x86 и x64 - в папка x64? Знам че компилирането ще е по-бавно, но това не е проблем.



  • Едновременно? Не.
    В процеса на компилиране, обектните файлове се "пакетират" с необходимото за избраната архитектура. За да може да се компилира за друга архитектура, въпросните файлове трябва да се изчистят. Ако имаш предвид да компилираш първо за 32, после за 64 бита и да запазиш и двата изпълними файла - според мен ще имаш по- голям успех с някакъв скрипт (.bat файл?) който да ти автоматизира процеса.

    За какво ти е такъв тип функционалност? Обикновено няма нещо което да работи на 32 битова система и да не работи на 64, освен ако не искаш да прескочиш някой специфични хардуерни граници на 32 битовата система.



  • Е, редно е когато една програма се пише, да използва максимално ресурсите които може да даде дадената система. Ако е x64, защо да не използва и двете ядра? Мислех че има някакъв автоматизиран процес, уви - няма. Благодаря за отговорите. Ще ги компилирам по този начин - първо x64, после с QMAKE_SPEC = win32-msvc2012 за x86.



  • Ако искаш изчакай отговори и от другите, аз лично за себе си не съм намерил вариант за автоматизирането, може и да съществува ;-)



  • Здравейте!

    @KDebian, архитектурата няма общо с ядрата. Ако искаш да използва всички ядра, когато компилира, може да му се зададе в настройките.

    Иначе при мен проектите Qt Creator компилира в папки от типа
    "Project-build-Desktop_Qt_5_0_0_GCC_64bit_SDK-Debug" и каквито още варианти си му задал. Изпълнимите файлове са вътре, така че би трябвало само да сменяш, за какво иска да компилираш и той даго прави. Това става с мишката от иконката на проекта в лентата от ляво на Qt Creator. Над бутона Run.



  • Да, това е при положение че си е задал няколко кита и със съответните настройки за проекта през Qt Creator.
    Също така мисля че той има предвид да се ползват две или повече ядра при рънтайм, не при компилиране.



  • За да се използват повече ядра приложението трябва да е многонишково. От много нишки има смисъл само ако има многоооо тежко изчисление или блокиращи операции. Всичко останало може да се реализира много лесно със сигнал/слот системата.
    Дори и да имаш няколко нишки пак не е сигурно, че те ще изпозлват всичките ядра. ОС-а(поне Линукс) се среми да пази нишките на едно от ядрата, за да се използва hot кеша. Идеята, е че споделените променливи, няма нужда да се махат от кеша на съответното ядро и суитчването е по-бързо. За да се изпозлват 2 ядра трябва системата да е доста натоварена и повечето процеси да са на едното ядро, тогава ОС- ще направи load balancing и може да премести нишката на друго ядро. Има и опция (в POSIX) за определене афинитета на нишката, на кое ядро на процесора да се пусне. Но не го препоръчвам, ако не е за нещо специфично като ембедед устройство, където се знае с голяма точност какво става в този момент.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.