Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: LinuxFanUNIX в Jan 13, 2009, 23:56



Титла: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 13, 2009, 23:56
Добър вечер,

Направих си проектче, което искам да разпространя, но ме интересува, как да го компилирам за всякакъв вид процесори, т.е. да е четим както за моя процесор (Intel Pentium 4), така и за останалите - пример: Intel Core Duo, пък и защо не и за AMD...?

Та бихте ли ми казали какви инструкции в make трябва да използвам за да се компилира за Multiprocesor support...?

/etc/make.conf не съществува...

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


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: n00b в Jan 14, 2009, 01:11
Компилирай я с опция за 686.

За много повече информация виж Гентутата.

http://www.gentoo.org/doc/en/gcc-optimization.xml
http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options
http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Optimize-Options.html#Optimize-Options

----------------
Накратко за мен е "march=i686 -Os"


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: task_struct в Jan 14, 2009, 08:52
Ако една програма е компилирана за Intel/AMD процесор, то тя ще работи и на другия. Като само трябва да се има впредвид дали е компилирана за 64битов или 32битов процесор.
Multiprocessor support-а се осигурява от операционната система, ако тя е конфигурирана за това и процесора не е едноядрен.
Иначе, ако твоята програма не е многонишкова, няма значение на какъв процесор/ОС я пускаш тя ще си работи само на едното ядро.


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 14, 2009, 19:43
В крайна сметка наистина ли е нужно нещо друго освен qmake-qt4 && make, да се направи за да бъде използвана програмата ми както на моя Intel (Pentium 4), така и за AMD??? Няма значение дали ще е за eдно ядро или две, важното да е изпълнима за всички процесори...

Та какво точно да направя...?

Благодаря!


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: task_struct в Jan 14, 2009, 19:52
Като я компилираш на Intel ще си работи и на АМД :) Спокойно те са напълно съвместими.


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 14, 2009, 23:22
Като я компилираш на Intel ще си работи и на АМД :) Спокойно те са напълно съвместими.
Благодаря за бързия отговор! Радвам се че е така...

А има ли значение дали са писани на Qt4, или е така и при C++ и останалите езици на програмиране?

А при компилиране с g++/gcc има ли значение дали само пиша g++/ gcc или не...

А и още нещо...

А от Intel-ите от по-нисък клас от Pentium 4, понеже е i686, ще поддържат ли програмите (т.е. да речем i386...?)

Извинявам се за може би тъпите въпроси...

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


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: n00b в Jan 15, 2009, 00:06

1. При всички езици е така с изключение на скриптовете - PHP, Perl, Ruby, Bash и т.н.

2. Не разбирам уви въпроса - какъвто езика такъв и компилатора - gcc обаче е compiler suite - и поддържа почти всичко. C/Objective C/C++.

3. i686 е всичко от PentiumPro нагоре включително него - нека броим - Pentium2, Pentium3, PentiumM, Pentium4, iCore, CoreSolo, CoreDuo и т.н.

i386 е минимума - поддържа 386, 486 и забележи 586 - основно клонинзи на Pentium барабар с него самия.


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: task_struct в Jan 15, 2009, 00:11
Няма значение от езика. Компилатора ще компилира за архитектурата, за която е той е конфигуриран или му е подадена.
За повече информация: http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: v_badev в Jan 15, 2009, 09:55
А при компилиране с g++/gcc има ли значение дали само пиша g++/ gcc или не...
gcc е C компилатор, g++ е C++ компилатор. Понеже ползваш QT най-вероятно пишеш на C++.
А от Intel-ите от по-нисък клас от Pentium 4, понеже е i686, ще поддържат ли програмите (т.е. да речем i386...?)
Не вярвам програма която е писана с QT4 да работи на 386. Все пак става дума за процесори работещи на не повече от 40MHz. Дори и Debian вече не поддържат i386. Според мен i586 е най-старият процесор за който има смисъл да компилираш.


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 15, 2009, 19:15
Дори и да е така, и i586 да е най-стария процесор, ако програмата която пиша я компилирам просто със make, без да съществува /etc/make.conf, без да съм редактирам Makefile, без да съм настройвал g++ предварително, ще се поддържа ли програмата или трябват допълнителни настройки...?


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: tarator в Jan 15, 2009, 20:26
Ако компилираш на 64 битова дистрибуция, изпълнимия файл ще работи само на 64-битов Линукс. Ако компилираш на 32-битова ще работи на 32-битов Линукс.

Най-добре разпространявай програмата с изходния код.


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: task_struct в Jan 15, 2009, 20:27
Ако я компилираш с make, ще се компилира за какъвто е процесора на машината, на която компилираш. /etc/make.conf не играе никаква роля, той е за Gentoo и portage просто подава аргументите записани в него на gcc/g++ останалите дистрибуции нямат такъв файл.

За да обобщя: Ако пуснеш просто make на една 32битова машина, без значение Intel/AMD, то после тя ще работи на всички 32битови машини. Същото се отнася и за 64битовите.


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 16, 2009, 19:40
А на 64??? Няма ли и там да работи, дори и на едно ядро...?


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: ircn в Jan 16, 2009, 20:46
А не мислиш ли, че задаваш въпроси на които вече ти е отговорено


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 18, 2009, 01:47
А не мислиш ли, че задаваш въпроси на които вече ти е отговорено
А при теб, как така се случи да направиш сефтето на форума като пишеш баш в моята тема...  ::)


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: task_struct в Jan 18, 2009, 09:29
Еми то наистина ти е отговорено вече  :D Но все пак ще го обясня още веднъж  :)

Първо: Архитектурата на процесора няма нищо общо с броя на ядрата.

Второ: Ако си компилираш програмата за 32битов процесор, независимо дали е АМД или Интел, то тя ще работи на всички 32битови процесори, независимо дали те са Интел или АМД и независимо колко ядра имат. Същото важи и за 64битовите процесори. Ако 64битова система поддържа емулация на 32битови инструкции, то и 32битовата версия ще върви на нея.

Трето: Една програма може да се възползва от многото ядра на процесора само ако диспечърът на процесите на операционната система поддържа многоядрен режим и програмата има поне 2 нишки. Като ОС-а решава дали да пусне нишките на отделни ядра или на едно. Това зависи от натоварването на системата, алгоритмите заложени в диспечъра на процесите и още доста неща и програмистът не може да направи нищо по въпроса. Така че на многоядрен процесор нямаш гаранция,че програмата ще върби по-бързо, даже може да е по-бавна заради заключване на данни от страна на една от нишките.

Надявам се този път да съм бил точен :)

П.П Под Интел/АМД разбирам всеки x86/x86_64 процесор


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 18, 2009, 22:10
Благодаря за пълния и изчерпателен отговор! Да си жив и здрав!  [_]3

Имам само един въпрос... За да не отварям нова тема, бихте ли ми казали как мога да настроя функцията make install да не инсталира в оригиналните директории които са му зададени, а в определена от мен...

Пример:

Ако make install копира файловете в /usr,  /etc, и аз задам примерно /tmp/ като определена от мен директория, файловете ДА НЕ отиват както е определено в /usr,  /etc, а в /tmp/usr/, /tmp/etc...

Надявам се сте ме разбрали...

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


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: task_struct в Jan 18, 2009, 23:45
Ако компилираш с ./configure, make и make install. Напиши ./configure --prefix=/tmp
Aко е със cmake тогава: cmake .. -DCMAKE_INSTALL_PREFIX=/tmp


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 19, 2009, 00:12
Ако компилираш с ./configure, make и make install. Напиши ./configure --prefix=/tmp
Aко е със cmake тогава: cmake .. -DCMAKE_INSTALL_PREFIX=/tmp
В случая имам само make файл...  :(


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: task_struct в Jan 19, 2009, 00:28
Ами тогава има 2 начина:

1) Отваряш Makefile-а и търсиш реда "install:" Под него са описани командите който да се изпълнят за инсталация. И си ги редактираш.

2) Правиш си отделен "раздел" във Makefile-а примерно "test:" и там си пишеш командите за тестова инсталация в /tmp и после иснталираш с make test

Успех  [_]3


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 19, 2009, 00:37
Ами тогава има 2 начина:

1) Отваряш Makefile-а и търсиш реда "install:" Под него са описани командите който да се изпълнят за инсталация. И си ги редактираш.

2) Правиш си отделен "раздел" във Makefile-а примерно "test:" и там си пишеш командите за тестова инсталация в /tmp и после иснталираш с make test

Успех  [_]3
А няма ли нещо по-автоматизирано, като случая с ./configure-то, защото като започнах проекта си, не мислех че изобщо ще го прекомпилирам, и си милех че ще е само сорс и го ударих на създаване на много папки, всяка със Makefile, и ако трябва да правя това ръчно - просто ще ме заболи клавиатурата на 500 папки и Makefiles... :)

Та, няма ли нещо по-автоматизирано, като ./configure --prefix=/tmp...

Благодаря за бързите отговори!  ;)


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: task_struct в Jan 19, 2009, 08:31
Aми доколкото разбирам сам си пишеш Makefile-овете, а не ги генерираш. Така, че няма друг вариант. Освен да си направиш една променлива в Makefile-а, която да указва пътя за инсталация и да си я сменяш само нея. Така ще се сменя 1 ред :) Друг вариант е тази променлива да се подава като опция на make. Вмомента няма откъде да погледна как точно ставаше, но виж make --help .

Иначе, за проект над 10ина файла ти препоръчвам да си направиш автоматизирано генериране на Makefile-овете. Така ще имаш и автоматично намиране на необходимите библиотеки, защото при ръчно написаните, ти разчиташ, че потребителят, при който си компилира програмата, има инсталирани всички нужни инструменти и библиотеки, което доста често не е така. Cmake е доста добър избор, също така ако пишеш на Qt може да използваш неговите инструменти - qmake :)


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 19, 2009, 20:21
Ми при мен въпросът стои така:

Многобройни папки, съдържащи C++, Qt4, GTK и почти всичко съм генерирал автоматично... Т.е. за Qt4 - qmake, C++ - генерирани от KDevelop и т.н.

Абе пълна смесица...  :(

А иначе даже и аз не знам изходните файлове, само make си знае работата...


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: task_struct в Jan 20, 2009, 08:37
Туй немога да си го представя  ???  :( Но ми прилича на няколко проекта, който, нз как, се линкават заедно  :o


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 21, 2009, 21:02
Туй немога да си го представя  ???  :( Но ми прилича на няколко проекта, който, нз как, се линкават заедно  :o
Ми всяка програмка е в различна папка и това е един общ проект...

Иначе ето как се линква всичко:

В един install script писан на sh съм написал нещо от рода:
for programfolder in `ls pwd`
do
      cd $programfolder && make  && make install && cd ..
done


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 22, 2009, 20:05
Някакви предложения...?


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: tarator в Jan 22, 2009, 20:55
Досега десет пъти да си променил Makefile-овете, вместо да чакаш на някой.


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 22, 2009, 23:43
Досега десет пъти да си променил Makefile-овете, вместо да чакаш на някой.
500 Makefile-а едва ли ще имам възможност да ги променя... пък и все пак това трябва да стане ръчно, не да си драсна скрипт който да ми ги въведе (както правя за повечето си неща които чакам автоматично да ми се изпълнят... чрез скрипт)...


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: tarator в Jan 23, 2009, 00:25
Ако имаш 500 Makefile-a значи не си мислил като си правил приложението. За сравнение, ядрото на Линукс има 1000 Makefile-a при 25 хиляди файла общо. Защо ли ми се струва, че твоят проект няма 12 хиляди файла ;)


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 23, 2009, 00:34
Ако имаш 500 Makefile-a значи не си мислил като си правил приложението.
Ми първоначално щеше да бъде проект само с един файл, след което си добавих и още 10 папки, след което се сетих че само на това не може да се каже проект и започнах да пиша, да пиша, да пиша... и така до около 500 папки съдържащи Sources и Makefiles...

Иначе отначало си мислех че като го пускам ще е само от сорс, и че 2-3 минути компилация няма да забави никого, но сега нещата не стоят така...  ;D


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: tarator в Jan 23, 2009, 00:35
Оправи го. Не повече от 10 Makefile-а.


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 23, 2009, 00:40
Оправи го. Не повече от 10 Makefile-а.
Как?


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: tarator в Jan 23, 2009, 00:42
Напиши си make файловете на ръка.


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 23, 2009, 01:48
Напиши си make файловете на ръка.
Всичките...?  :o


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: task_struct в Jan 23, 2009, 02:15
Със CMake можеш да си генерираш автоматично Makefile-овете ;) Лесно се конфигурира и пуска.

П.П Имаш 500 директори  ???  ???  ??? Ти да не правиш бранч на КДЕ или на ядрото?



Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 23, 2009, 12:58
Не, правя си нова графична среда, която съдържа и офис пакет, и плейъри (правени от мен), конвертори, редактори и всичко това - на C++/C/Qt4/GTK и няколко на Python/Perl...


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 23, 2009, 12:58
А как да го направя със CMake???


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: BULFON в Jan 23, 2009, 14:32
//off
Силно се надявам интуицията ми да ме лъже


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: ANTIADMIN в Jan 23, 2009, 14:59
//off
Силно се надявам интуицията ми да ме лъже
'he is back' ;D Kuko desktop environment


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: gat3way в Jan 23, 2009, 15:34
Сигурно е решил да пише нов WM след като реактос-бг проектът беше атакуван и хакнат от зли арабски хахори:

http://www.reactos-bg.org/


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 23, 2009, 19:16
Тея последните 3 поста не можах да ги разбера... Честно!

Правя си графична среда, не виждам нищо лошо в това...

Имам много код, не виждам лошо в това...

Искам да го прекомпилирам и изходните файлове да се съберат в една папка и да ги пакетирам, но и в това не виждам лошо...

За тези които се опитват да разгадаят името на графичната среда, все още няма такова... не виждам нищо лошо в това...

Благодаря за всички които ми помогнаха, но след тези последните 3 поста, май няма да можем да се разберем, тъй като не съм нито спамер, нито въпросният потребител, или пък някой който си прави базик със своите съфорумници, но ако наистина сметнете че аз съм такъв и правя т*шак със останалите - можете спокойно да ми затворите темата, но пък все пак вие сте ми надеждата, защото не мисля че има други сайтове в които бих получил отговор за кратък период от време...


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: task_struct в Jan 23, 2009, 19:40
За CMake, свестна документация нз :( Ако някой знае да пише :) Иначе аз поне го намирам за доста по удобно, бързо и лесно спрямо auto tools :)


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 23, 2009, 20:31
За CMake, свестна документация нз :( Ако някой знае да пише :) Иначе аз поне го намирам за доста по удобно, бързо и лесно спрямо auto tools :)
Първата ми работа беше да видя man cmake, но доста има писано но само за компилиране, не и за автоматизация като моята...


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: n00b в Jan 23, 2009, 20:50
Тея последните 3 поста не можах да ги разбера... Честно!

Правя си графична среда, не виждам нищо лошо в това...

Случайно да си от Шумен?


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: tarator в Jan 23, 2009, 21:21
Няма нищо по-противно от autotools, само болните мозъци на разработчиците на GNU могат да измислят нещо толкова противно. cmake не изглежда много по-добре, но не съм го гледал в детайли. Какво е лошото на писането на обикновени Makefiles?


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 23, 2009, 22:41
Тея последните 3 поста не можах да ги разбера... Честно!

Правя си графична среда, не виждам нищо лошо в това...

Случайно да си от Шумен?
Не, защо...? Срещи ли ще си уговаряме...?  ;D


Няма нищо по-противно от autotools, само болните мозъци на разработчиците на GNU могат да измислят нещо толкова противно. cmake не изглежда много по-добре, но не съм го гледал в детайли. Какво е лошото на писането на обикновени Makefiles?

Я дай малко повече инфо...


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: ANTIADMIN в Jan 23, 2009, 23:19
Тея последните 3 поста не можах да ги разбера... Честно!

Правя си графична среда, не виждам нищо лошо в това...

Случайно да си от Шумен?
Не, защо...? Срещи ли ще си уговаряме...?  ;D

А случайно, преди да си писал декстоп среда, да си написал твоя собствена революционна операционна система? ;D


Титла: Re: Компилиране на програма за всякакъв вид процесор
Публикувано от: LinuxFanUNIX в Jan 24, 2009, 00:09
Тея последните 3 поста не можах да ги разбера... Честно!

Правя си графична среда, не виждам нищо лошо в това...

Случайно да си от Шумен?
Не, защо...? Срещи ли ще си уговаряме...?  ;D

А случайно, преди да си писал декстоп среда, да си написал твоя собствена революционна операционна система? ;D
Абе какви са тея въпроси бре...?