webForumDet fria alternativet

Fattar inte...

9 svar · 309 visningar · startad av prey

preyMedlem sedan jan. 2002341 inlägg
#1

[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
#2

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
#3

Då funkade det jättebra! :birp

PeWMedlem sedan juni 200010 432 inlägg
#4

prey skrev:

Då funkade det jättebra! :birp

Då är svaret accepterat då? ;)

preyMedlem sedan jan. 2002341 inlägg
#5

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.

preyMedlem sedan jan. 2002341 inlägg
#6

här kommer källkoden..

UlfTMedlem sedan maj 20018 027 inlägg
#7

Vilka felmeddelanden får du från kompilatorn när du kompilerar i windows?

PeWMedlem sedan juni 200010 432 inlägg
#8

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
#9

mm, så enkelt är det. :D

Nu vet jag iaf hur det funkar..
Tackar för svaren!

PeWMedlem sedan juni 200010 432 inlägg
#10

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. :)

256 ms totalt · 3 externa anrop · v20260731065814-full.ca5a5675
122 ms — hämta forumlista (db)
128 ms — hämta statistik (db)
124 ms — hämta tråd, inlägg och bilagor (db)