Zethyr Skrevet 2. desember 2003 Del Skrevet 2. desember 2003 (endret) Jeg driver egentlig og pusler med et lite fint prosjekt med en CGI-gjestebok laget i C++, men støtte på et par grusomme feil... P.G.A dette lagde jeg en liten kode som bruker de samme elementene, og jada; feilen kommer der også: #include <iostream> #include "cgic.h" using namespace std; int cgiMain(){ cgiHeaderContentType("text/html"); cout<<"<HTML>\n"; cout<<"<HEAD><TITLE>HEH...</TITLE></HEAD>\n"; cout<<"<BODY>\n"; cout<<"Heiåhå!!!!:-)\n"; cout<<"</BODY>\n"; cout<<"</HTML>\n"; return 0; } denne burde jo være grei å kompilere, men den får akkurat samme feilen som i gjesteboka: fatal error LNK1254: metadata for symbol '?cgiMain@@$$J0YAHXZ' inconsistent with COFF symbol table Jeg har prøvd å inkludere cgic.c i stedet for cgic.h, og får bare flere merkeligere feil. I gjesteboka får jeg feilen i cgiHeaderContentType også, men hvis jeg fjerner den kommer feilen i cgiMain... Jeg har satt opp filer i vanlig c til å kompileres som det også... Jeg bruker VS.NET, men har fått samme feil i DevCpp(bloodshed). Feilen skjer under linking... Endret 2. desember 2003 av Zethyr Lenke til kommentar
daysleper Skrevet 2. desember 2003 Del Skrevet 2. desember 2003 Jeg kjenner ikke så godt til feilmeldingene under VC. Kunne du gitt den tilsvarende meldingen du får i DevCpp (MinGW)? Sånn med det første vil jeg tippe at du må linke med et eller annet cgi-bibliotek du har lastet ned. Altså du får feilen fordi du ikke linker med dette biblioteket. Lenke til kommentar
daysleper Skrevet 2. desember 2003 Del Skrevet 2. desember 2003 Hvilket bibliotek er det forresten? Hjemmeside? Lenke til kommentar
kjetil7 Skrevet 3. desember 2003 Del Skrevet 3. desember 2003 (endret) Her er det sannsynligvis noe tull med blanding av C og C++ og bruken av extern keyword. Mitt forslag er å rename C filene (går ut fra at det er et C bibliotek) fra *.c til *.cpp. Filene blir da kompilert med C++ kompilatoren og ikke C komplatoren. Tipper problemene dine forsvinner da En annen løsning er å gå gjennom header filen(e) (cgic.h) og legge til: #ifdef __cplusplus extern "C" XXXXXXX #else extern XXXXXXX #endif ...for alle forekomster av extern. Samtidig må du sannsynligvis skrive cgiMain slik: extern "C" int cgiMain() { //..... } Endret 3. desember 2003 av kjetil7 Lenke til kommentar
Zethyr Skrevet 3. desember 2003 Forfatter Del Skrevet 3. desember 2003 Jeg er på skolen nå, men skal prøve når jeg kommer hjem... det er en ganske lik feilmelding i DevCpp... filene fulgte med i PC-Pro for en stund siden, men det skulle ligge på boutell.com... Jeg kan jo prøve å se om det er noen biblioteker der, men det fulgte ikke med noen i PCPro... I PCPro hadde de kompilert kode med bare å si fra at c-filene skulle kompileres med c-kompilatoren... jeg skal prøve å rename filene også når jeg kommer hjem... kan noen av dere bare si fra om det går bra å kompilere det uten å modifisere koden og filnavenene i noen andre kompilatorer?? takker for alle svar... Lenke til kommentar
daysleper Skrevet 3. desember 2003 Del Skrevet 3. desember 2003 Kanskje et C++ lib er det du er ute etter: http://www.gnu.org/software/cgicc/cgicc.html ..i stedet for et C-lib. Det kan jeg i hvertfall selv bekrefte at fungerer utmerket under C++. (ser du bruker cout, som er C++) Lenke til kommentar
kjetil7 Skrevet 3. desember 2003 Del Skrevet 3. desember 2003 (endret) Etter å ha sett på biblioteket som ligger på http://www.boutell.com/ kan jeg bekrefte at det er blanding av C++ og C som er problemet. Det som skjer er at main() som du finner i cgic.c kaller cgiMain(). I ditt tilfelle kaller da C funksjonen main() C++ funksjonen cgiMain(). Dette vil ikke fungere hvis du ikke deklarerer cgiMain() som extern "C". Samtdig må du legge til extern "C" i #ifdef __cplusplus blokker slik jeg beskrev i min forrige post. Her er et par eksempel fra headeren: #ifdef __cplusplus extern "C" void cgiHeaderLocation(char *redirectUrl); extern "C" void cgiHeaderStatus(int status, char *statusMessage); extern "C" void cgiHeaderContentType(char *mimeType); #else extern void cgiHeaderLocation(char *redirectUrl); extern void cgiHeaderStatus(int status, char *statusMessage); extern void cgiHeaderContentType(char *mimeType); #endif /* ........ */ #ifdef __cplusplus extern "C" int cgiMain(); #else extern int cgiMain(); #endif ..men den enkleste løsningen er som sagt å gi alle C filene cpp extension. Endret 3. desember 2003 av kjetil7 Lenke til kommentar
Zethyr Skrevet 3. desember 2003 Forfatter Del Skrevet 3. desember 2003 Bare ved å rename filene fungerte det ikke, så jeg tar en titt på det c++ biblioteket, tror jeg... har ikke testet den lille fila, men bare gjestebok-tingen.. ang. cout har jeg prøvd med flere c-varianter... Lenke til kommentar
kjetil7 Skrevet 4. desember 2003 Del Skrevet 4. desember 2003 Vel, jeg har klart å reprodusere feilen din og bruker filene fra http://www.boutell.com/cgic/ som er de samme som du bruker. Å gi cgic.c nytt navn til cgic.cpp løser problemene. Det skal det gjøre. Jeg har fått begge løsningene som jeg skisserte til å fungere uten noen som helst problemer. Du kan prøve å kjøre 'clean' og 'rebuild' (eller bruke c++ biblioteket som kanskje er den beste løsningen ) Lenke til kommentar
daysleper Skrevet 4. desember 2003 Del Skrevet 4. desember 2003 Jørs; er folk våkne ennå/så tidlig? Lenke til kommentar
kjetil7 Skrevet 4. desember 2003 Del Skrevet 4. desember 2003 (endret) Jepp måtte tidlig opp i dag Slo deg med en time Endret 4. desember 2003 av kjetil7 Lenke til kommentar
Zethyr Skrevet 4. desember 2003 Forfatter Del Skrevet 4. desember 2003 wehay!! clean og rebuild så ut til å funke... takk for tipset, jeg ante ikke om det....... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå