webForumDet fria alternativet

Fattar inte...

C/C++ur C/C++

9 svar · 309 visningar · startad av prey

Medlem sedan jan. 2002341 inlägg
Frågan#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!

Medlem 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 ;)

Medlem sedan jan. 2002341 inlägg
#3

Då funkade det jättebra! :birp

Medlem sedan juni 200010 432 inlägg
#4

prey skrev:

Då funkade det jättebra! :birp

Då är svaret accepterat då? ;)

Medlem 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.

Medlem sedan jan. 2002341 inlägg
#6

här kommer källkoden..

Medlem sedan maj 20018 027 inlägg
#7

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

Medlem 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?

Medlem sedan jan. 2002341 inlägg
#9

mm, så enkelt är det. :D

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

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

149 ms totalt · 3 externa anrop · v20260731065814-full.55e59744
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
146 ms — hämta tråd, inlägg och bilagor (db)