[linux] gcc en i686 proc

Pagina: 1
Acties:
  • 145 views sinds 30-01-2008
  • Reageer

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
Hoi!

Standaard maakt gcc binaries voor i386 dus die altijd werken. Maar ik wil graag compilen voor mijn pentium II, i686 dus. Daar moet je de optie mcpu=i686 voor gebruiken maar onthoud ie dit ook dus als ik later dan een programma compile gewoon met het make commando maakt ie dan de binaries ook voor i686? Of moet ik dat anders doen?

  • Paulum
  • Registratie: Augustus 2000
  • Laatst online: 09-06 12:25
Gwoon ff een kernel compileren voor i686

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
dat was mijn vraag niet helemaal eigenlijk of is het dus zo als je een kernel compiled voor een i686 dat gcc ook automatisch altijd voor i686 gaat compilen????
Dat dacht ik toch niet.

Mijn vraag ik dus hoe ik gcc altijd standaard voor i686 kan laten compilen, dus of ie de mcpu=i686 optie onthoud

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
Ik heb nog even wat zitten proberen, de mcpu=i686 optie werkt volgens mij alleen maar voor de source die je dan compiled, als je daarna iets anders gaat compilen neemt ie gewoon weer standaard i386 tenzij je weer de mcpu=i686 optie gebruikt. Weet iemand hoe ik ervoor kan zorgen dat mcpu=i686 gewoon altijd gebruikt wordt, je moet toch wel ergens default instellingen kunnen opgeven.

Verwijderd

probeer eens: alias gcc='gcc mcpu=i686'
moet je dat ff in je .bashrc oid pleuren en dan hoef je maar gcc te typen en bash maakt er automatisch gcc mcpu=i686 voor je van.

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

Voor elke Makefile moet je expliciet opgeven wat voor params je mee wilt geven aan de compiler. Meestal gebeurd dit via de $(CFLAGS) optie.

Als in een makefile geen info staat over je cpu (mcpu=blahblahblah) dan compiled hij standaard voor de 386 (laagste Intel proc-versie die hij kent). Je kunt hier niets aan veranderen (voor zover mij bekend) via externe config-files (a la /etc/gcc.conf ofzow)..


Maar aan de andere kant: de meeste Makefiles worden vooraf gegaan door een configure-fase welke je systeemvariabelen (en applicatie-wensen) vastlegt. Meestal is dat ./configure, maar zoals in het geval van de kernel is dat een compleet andere programma (menuconfig).

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

>alias gcc='gcc mcpu=i686'

Hier had ik nie eens aan gedacht :+. Ben niet zo fan van aliassen,.. maar het werkt wel.. :)

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • junkbuster
  • Registratie: November 2000
  • Laatst online: 17-08 17:40

junkbuster

Try 2 Hack Me...

Vroeger vulde ik allerlei instellingen in in environmentvariabelen die door gcc werden ingelezen. Je kan ze in je shell definieren, maar ook in je makefile. Hiermee kan je 'make' de goeie kant op sturen.

Een standaardvariabele voor gcc is CFLAGS. Plaats eens in je .bashrc iets als "export CFLAGS=-mcpu=i686". Ik kan het helaas nu even niet voor je uitproberen, omdat ik nu onder windhoos draai.

Helaas werkt dit niet altijd; de eerste de beste makefile die CFLAGS overschrijft (en die zijn er best veel) zal jouw standaardinstellingen laten verdwijnen.

Groetjes,

Joost

  • N8w8
  • Registratie: Mei 2000
  • Niet online
In je ~/.bashrc, ~/.bash_profile, $HOME/.profile, /etc/profile, /etc/bashrc, whatever:

export CFLAGS='-march=i686 -mcpu=i686'
export CXXFLAGS=$CFLAGS

bijna ieder configure scriptje pakt deze variables. Dat kan je zien bij het regeltje "Checking if your compiler ("gcc -march=i686 -mcpu=i686") is a cross compiler.... no" o.i.d.

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
Bedankt voor jullie reacties!

alias lijkt me dan de beste oplossing want dat moet altijd werken, dat werkt toch ook gewoon in makefiles? ik ga het meteen proberen

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
Ik heb het even ingevoerd en ff opnieuw ingelogd, als het goed is moet het nu werken. Het enige probleem is: je kan niet zien of het werkt :)
Weet iemand misschien hoe ik dit kan testen?

  • N8w8
  • Registratie: Mei 2000
  • Niet online
Nee, alias werkt niet in Makefiles.
Als je wilt dat het in Makefiles werkt (die niet zijn gemaakt met n configure scriptje), moet je de Makefile editen, en de CFLAGS en CXXFLAGS met de hand aanpassen (zie mn vorige post).

Als je wil zien of t werkt, kijk dan naar de output van make. Als je CFLAGS daarin voorkomen (dus dat -march en dat -mcpu) dan werkt t!

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
alias werkt dus helaas niet bij makefiles, dus als ik zelf het het commando geef zorgt alias ervoor dat het automatisch geregeld wordt (is er nog een manier om te testen of dat werkt) en voor de makefiles zet ik dan dan die export CLFLAGS regeltjes in mijn .bashrc file in m'n home directory. Het enige probleem daarbij is dat sommige makefiles die overschrijven. Als ik de schrijftoestemming nou gewoon ff uit zet want ik edit dat filetje toch bijna nooit dan zou het toch goed moeten gaan of niet?? Of krijg ik daar problemen mee?

  • N8w8
  • Registratie: Mei 2000
  • Niet online
De CFLAGS die je in je .bashrc opgeeft is meer n default waarde voor wanneer er geen CFLAGS is. In zowat alle Makefiles staat er wel n CFLAGS dus wordt die altijd gebruikt. Gewoon de Makefile editen en je CFLAGS erin zetten (of erbij zetten) uit je .bashrc (dus dat -march en dat -mcpu)

Dan is t probleem opgelost

  • N8w8
  • Registratie: Mei 2000
  • Niet online
En dat ge-alias werkt alleen onder bash.
Makefiles worden ingelezen door make (wat een andere 'shell' is dan bash) dus die kan daar niks mee.

Wat ik als alias heb bijvoorbeeld is:
$ alias make='make -j2'
Dan start ie 2 make threads als ik een make-commando geef in bash, maar hij splitst ze dan niet verder op bij sub-makes, omdat make die bash-aliases gewoon niet herkent (m.a.w. het is geen bash).

Ik ben niet zo goed in uitleggen :)

Verwijderd

Normaal geef je de standaard processor en architectuur voor GCC op tijdens het compileren van GCC zelf (het zg. "bootstrappen" van de compiler). Je kunt dan bij het ./configure script voor de compiler de -m opties aangeven; waarna hij ze voor ieder te compilen programma ook gebruikt.

Als bootstrapping geen optie is, zou ik gcc zelf renamen naar iets anders (in de bindir). Vervolgens maak je een shellscriptje genoemd gcc, dat de gerenamede gcc opstart met de juiste opties.

  • easydisk
  • Registratie: Februari 2000
  • Laatst online: 12-08 14:26
waarom i686 en geen pentiumpro ? een PII is op een PPro gebasseerd.

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
of je i686 of pentiumpro gebruikt maakt niks uit.
Voor makefiles is dus de enige mogelijkheid de makefiles zelf aanpassen of gcc opnieuw compilen, dan doe ik dat wel ff in de makefiles, dat kost toch een stuk minder tijd dan gcc opnieuw compilen.

Verwijderd

Je kunt dus ook gcc renamen en een shellscriptje genoemd "gcc" schrijven, dat vervolgens gcc met de goede opties opstart.

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
een shellscript lijkt me dan ook wel een goed idee, dat ga ik maar eens proberen. Ik ben eerst ff de makefile aan het proberen van qt2.2.3, de opties voor de compiler staan voor elk platform in een andere file in de dir /configs voor linux dus inlinux-g++-shared hier moet ik de opties aangeven:

# Compiling
INTERFACE_DECL_PATH = .
SYSCONF_CXX = g++
SYSCONF_CC = gcc
DASHCROSS =

# Compiling with support libraries
SYSCONF_CXXFLAGS_X11 = -I/usr/X11R6/include
SYSCONF_CXXFLAGS_QT = -I$(QTDIR)/include
SYSCONF_CXXFLAGS_OPENGL = -I/usr/X11R6/include

# Compiling YACC output
SYSCONF_CXXFLAGS_YACC = -Wno-unused -Wno-parentheses

Moet ik dus bij het eerste stukje met CXXFLAGS gewoon overal -march=i686 ervoor zetten?
Maar wat is YACC output? Dat snap ik niet helemaal :?

Verwijderd

Yacc is een utility om parsers mee te genereren. Het heeft als input een beschrijving van een grammatica, en output c code. Onder linux heet yacc meestal bison.

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
ah, moet ik daar ook gewoon -march=i686 voorzetten dus als ik bij alles -march=i686 ervoor zet (bij alles met CXXFLAGS dan) moet het goed gaan. Het compilen duurt 2 tot 3 uur :Z dus wil ik graag eerst ff weten of ik het zo goed doe ;)

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
Ik heb nu vakantie :) dus ik ga het zodadelijk maar ff proberen, heeft iemand nog tips of ik het zo goed doe, dus overal waar CXXFLAGS staat er -march=i686 voorzetten (ook bij de YACC output)??

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
ik ben net begonnen,

er bleken nog zoveel meer flags te staan dat ik maar gewoon bij de naam van de compiler -march=i686 heb toegevoegd, hij is nu aan het compilen en hij zet er inderdaad -march=i686 voor. Over 2 en half uur laat ik even weten of het gelukt is.

:Z

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
het lukt niet :(

Ik heb het al op 2 manieren geprobeerd, ik heb 1 keer achter de naam van de compiler en 1 keer bij de cxxflags die altijd gebruikt worden -march=i686 gezet maar na ongeveer anderhalf uur kapt ie ermee met een undefined reference error. Dat probleem heeft ie niet als ik hem voor i386 compile. Hoe kan dit :? :? :(

Verwijderd

Probeer wat mietje zei: rename je gcc naar bijv. gcc2 en maak dan een script genaamd gcc:
#!/bin/bash
a=$1;
for i in `seq 1 $#`; do
shift;
a="$a $1";
done;
gcc2 -march=i686 $a;

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
bedankt voor je hulp maar het probleem is nu eigenlijk niet meer hoe ik -march=i686 erbij krijg maar dat als ik hiermee compile dat ie halverwege me een error ophoud die die normaal niet heeft. Heeft iemand een idee waarom ie voor i386 wel compiled zonder problemen en voor i686 niet. Dat hoort toch gewoon goed te gaan

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
niemand een idee?

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

Als je dan eerst eens begint met de error te pleacken ende knippen..

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
undifined reference error to "LPR0",

hij mist dus iets maar niet als ik hem voor i386 compile

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
ik ben hem nu nog maar een keertje opnieuw voor i386 aan het compilen om te kijken of ie het inderdaad dan wel doet. Het is al twee weken geleden dat ie zonder problemen voor i386 gecompiled is dus misschien is er iets veranderd waardoor het niet meer lukt. Dan weet ik in ieder geval waar het aan ligt.

  • Pc123
  • Registratie: Oktober 2000
  • Laatst online: 09:24
dat gaat wel goed, het ligt dus echt aan de i686 instelling. Ik ga misschien maar eens ff een andere compiler testen of misschien i586. Hopelijk werkt het dan wel.
Pagina: 1