preyMedlem sedan jan. 2002341 inlägg [rtv@tervehn projekt1]$ gcc -o mittprog.exe -x c++ main.cpp
/tmp/ccadJP23.o: In function `main':
/tmp/ccadJP23.o(.text+0xa): undefined reference to `endl(ostream &)'
/tmp/ccadJP23.o(.text+0x17): undefined reference to `cout'
/tmp/ccadJP23.o(.text+0x1c): undefined reference to `ostream::operator<<(char const *)'
/tmp/ccadJP23.o(.text+0x27): undefined reference to `ostream::operator<<(ostream &(*)(ostream &))'
/tmp/ccadJP23.o(.text+0x32): undefined reference to `endl(ostream &)'
/tmp/ccadJP23.o(.text+0x3f): undefined reference to `cout'
/tmp/ccadJP23.o(.text+0x44): undefined reference to `ostream::operator<<(char const *)'
/tmp/ccadJP23.o(.text+0x4f): undefined reference to `ostream::operator<<(ostream &(*)(ostream &))'
collect2: ld returned 1 exit status
[rtv@tervehn projekt1]$
...får jag när jag försöker kompilera följande i Linux RedHat7.3 med gcc 2.96:
[rtv@tervehn projekt1]$ vi main.cpp
#include <iostream>
using namespace std;
int main()
{
cout<<"Testar att programmera lite C++"<<endl;
cout<<"BlaBla..."<<endl;
return 0;
}
Vad är fel??? Koden är ju sk*tsimpel!
PeWMedlem sedan juni 200010 432 inlägg Vad händer om du istället kompilerar med g++?
Förresten så är ett '.exe' suffix windowsspecifikt och genom att du antagligen inte tänker dig att kompilera för windowsplattformen kan du för enkelhetens skull skippa suffix och bara ange "mittprogg" eller liknande .. går filen att köra så körs den om du anger 'mittprogg' i skalet och du slipper knappa in en massa jobbiga filändelser ;)
preyMedlem sedan jan. 2002341 inlägg Då funkade det jättebra! :birp
PeWMedlem sedan juni 200010 432 inlägg
prey skrev:
Då funkade det jättebra! :birp
Då är svaret accepterat då? ;)
preyMedlem sedan jan. 2002341 inlägg Hur får jag programmet att fungera i windows kommandotolken? Nu funkar det alldeles utmärkt i RedHat, men det blir några fel när jag försöker i windows och programmet körs inte.
UlfTMedlem sedan maj 20018 027 inlägg Vilka felmeddelanden får du från kompilatorn när du kompilerar i windows?
PeWMedlem sedan juni 200010 432 inlägg Det är ju ren och skär standardkod så den bör kompilera under både windows och linux. Men du måste ju endera ha en kompilator för vardera plattform alternativt en s.k crosscompiler (ganska onödigt att sätta upp om du inte har ett kommersiellt intresse eller bygger för inbyggda system).
Är det så enkelt att du kompilerat under en plattform och försöker köra binären under en annan?
preyMedlem sedan jan. 2002341 inlägg mm, så enkelt är det. :D
Nu vet jag iaf hur det funkar..
Tackar för svaren!
PeWMedlem sedan juni 200010 432 inlägg Hmm... okej. För att göra saken ännu tydligare så.. :
När man kompilerar ett program till maskinkod blir den koden plattformsspecifik, även om man nu skulle använda standardbibliotek. Maskinkoden är ju dels specifik med tanke på instruktionerna till cpu:n och kringliggande kretsar och dels är de olika operativsystemen uppbyggda på lite olika sätt. Windows har en typ av 'header' (startblock för exekverbar kod) och linux en annan. Sen är det skillnad på vilka s.k systemanrop som görs mot respektive operativsystem... (rutiner för utskrifter, inmatning e.t.c) så även om ett standardbibliotek till synes är lika för programmeraren, så bidrar de med olika kod beroende på system.
Vilket betyder att även om man kör på samma arkitektur (pc med dual boot, e.t.c) så är det skillnad ändå med tanke på hur operativsystemen fungerar. :)