/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
linker fejl med gcc-3.2
Fra : Thomas Rasmussen


Dato : 10-05-03 23:13

Hej gruppe

Jeg sidder og er løbet ind i et underligt problem. Jeg har et program
(vores projekt på uni) som jeg gerne vil compile, men hvis jeg bruger
gcc-3.2.3 fra Debian Sid så får jeg følgende linker fejl.

normalizeedge.o(.gnu.linkonce.t._ZN8HeapNodeC1Ev+0xd): In function `HeapNode::HeapNode[in-charge]()':
: undefined reference to `FibHeapNode::FibHeapNode[not-in-charge]()'
collect2: ld returned 1 exit status

Men hvis jeg bruger gcc 2.95 og de nøjagtig samme compileflag
(Makefilen er slet ikke ændret andet end at den peger på
/usr/bin/gcc-2.95 istedet for /usr/bin/gcc som 3.2.3) så kan den godt
compile.

Der er under compilingen ikke nogen relevante warnings eller lign.

Er der nogen der har en ide om hvad det kan være der er skyld i det?

/Thomas

--
/"\ | Human Knowledge Belongs To The World
\ / | -- Milo Hoffman in "AntiTrust"
x |
/ \ <-- (ASCII Ribbon Campain against html emails and postings!)

 
 
Jacob Bunk Nielsen (10-05-2003)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 10-05-03 23:23

Thomas Rasmussen <simpsons@kom.auc.dk> writes:

> normalizeedge.o(.gnu.linkonce.t._ZN8HeapNodeC1Ev+0xd): In function `HeapNode::HeapNode[in-charge]()':
> : undefined reference to `FibHeapNode::FibHeapNode[not-in-charge]()'
> collect2: ld returned 1 exit status

Hvor kommer FibHeapNode() fra?

Har du oversat den fil FibHeapNode() kommer fra med GCC 3.2.3? GCC
2.9.5 og 3.2.3 er binært kompatible.

> Der er under compilingen ikke nogen relevante warnings eller lign.

Nej, det er helt normalt. Det er linkeren der fejler, ikke oversætteren.

--
Jacob - www.bunk.cc
Depart not from the path which fate has assigned you.

Thomas Rasmussen (11-05-2003)
Kommentar
Fra : Thomas Rasmussen


Dato : 11-05-03 10:19

Jacob Bunk Nielsen <spam@bunk.cc> writes:

> Thomas Rasmussen <simpsons@kom.auc.dk> writes:
>
>> normalizeedge.o(.gnu.linkonce.t._ZN8HeapNodeC1Ev+0xd): In function `HeapNode::HeapNode[in-charge]()':
>> : undefined reference to `FibHeapNode::FibHeapNode[not-in-charge]()'
>> collect2: ld returned 1 exit status
>
> Hvor kommer FibHeapNode() fra?
>
> Har du oversat den fil FibHeapNode() kommer fra med GCC 3.2.3? GCC
> 2.9.5 og 3.2.3 er binært kompatible.

Fra en anden fil i samme projekt. Det hele er compilet med GCC 3.2.3
fra source.

Hvis du vil, så kan koden findes på
http://kom.auc.dk/~simpsons/fibheap.cpp, det bliver kaldt fra en anden
fil således

theHeap = new FibHeap;


/Thomas

--
/"\ | Human Knowledge Belongs To The World
\ / | -- Milo Hoffman in "AntiTrust"
x |
/ \ <-- (ASCII Ribbon Campain against html emails and postings!)

Jacob Bunk Nielsen (11-05-2003)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 11-05-03 11:57

Thomas Rasmussen <simpsons@kom.auc.dk> writes:
> Jacob Bunk Nielsen <spam@bunk.cc> writes:
>
>> Hvor kommer FibHeapNode() fra?
>
> Fra en anden fil i samme projekt. Det hele er compilet med GCC 3.2.3
> fra source.

Du er opmærksom på at rækkefølgen af hvilken du angiver dine filer til
gcc ikke er ligegyldig. En forkert rækkefølge vil typisk give en
linkerfejl.

Lad os sige at du har skrevet foo.c, som skal bruge
matematikbiblioteket. Så går det galt, hvis du gør:

gcc -lm foo.c

Gør du i stedet:

gcc foo.c -lm

er den glad.

Det er fordi den starter fra en ende af og finder ud af hvad der er
brug for. Når du så forsøger at linke med matematikbibliotek i første
eksempel siger den bare "Hmmm, det kan da ikke passe, jeg har ikke set
noget matematik, gå væk med dig", og så fejler linkeren senere.

Måske er det noget lignende I støder på?

Er det den samme Makefile I bruger? Må vi se den?

> Hvis du vil, så kan koden findes på
> http://kom.auc.dk/~simpsons/fibheap.cpp, det bliver kaldt fra en anden
> fil således
>
> theHeap = new FibHeap;

Det ser jo fint nok ud. Koden er ikke helt tidsvarende C++, men så
længe compileren ikke smider nogle fejl burde der ikke være
problemer.

--
Jacob - www.bunk.cc
If it wasn't so warm out today, it would be cooler.

Thomas Rasmussen (11-05-2003)
Kommentar
Fra : Thomas Rasmussen


Dato : 11-05-03 12:06

Jacob Bunk Nielsen <spam@bunk.cc> writes:

> Du er opmærksom på at rækkefølgen af hvilken du angiver dine filer til
> gcc ikke er ligegyldig. En forkert rækkefølge vil typisk give en
> linkerfejl.

Jo det er jeg opmærksom på, men da det jo compiler med gcc 2.95 så
skulle det vel ikke være problemet.

> Er det den samme Makefile I bruger? Må vi se den?

Det er helt den samme Makefile, jeg har smidt den på
http://kom.auc.dk/~simpsons/Makefile

Dog skal det siges at den er ikke særlig pæn Burde få sat mig ind
i autoconf/automake men det har jeg ikke lige tid til på dette
tidspunkt. Det skal siges at det er den entry der passer med
hostname=bart der volder problemer.



/Thomas

--
/"\ | Human Knowledge Belongs To The World
\ / | -- Milo Hoffman in "AntiTrust"
x |
/ \ <-- (ASCII Ribbon Campain against html emails and postings!)

Thomas Rasmussen (11-05-2003)
Kommentar
Fra : Thomas Rasmussen


Dato : 11-05-03 12:21

Thomas Rasmussen <simpsons@kom.auc.dk> writes:

Hmm... nu fik jeg sku den til at virke, på lidt af et longshot prøvede
jeg en lille ting:

I include filen til fibheap.cpp (fibheap.h) var contructeren lavet som
inline altså:

class FibHeapNode
{
friend class FibHeap;

FibHeapNode *Left, *Right, *Parent, *Child;
short Degree, Mark, NegInfinityFlag;

protected:

inline int FHN_Cmp(FibHeapNode& RHS);
inline void FHN_Assign(FibHeapNode& RHS);

public:

inline FibHeapNode();
virtual ~FibHeapNode();

}

Jeg prøvede så at slette "inline", og så ville den sku godt
compile... har ingen anelse om hvad det har betydet, men det er
åbenbart ikke noget gcc3 er så glad for

Hvis der er nogen der kan give en begrundelse, så er jeg lydhør

/Thomas

--
/"\ | Human Knowledge Belongs To The World
\ / | -- Milo Hoffman in "AntiTrust"
x |
/ \ <-- (ASCII Ribbon Campain against html emails and postings!)

Benny Amorsen (11-05-2003)
Kommentar
Fra : Benny Amorsen


Dato : 11-05-03 10:39

>>>>> "TR" == Thomas Rasmussen <simpsons@kom.auc.dk> writes:

TR> Hej gruppe Jeg sidder og er løbet ind i et underligt problem. Jeg
TR> har et program (vores projekt på uni) som jeg gerne vil compile,
TR> men hvis jeg bruger gcc-3.2.3 fra Debian Sid så får jeg følgende
TR> linker fejl.

TR> normalizeedge.o(.gnu.linkonce.t._ZN8HeapNodeC1Ev+0xd): In function
TR> `HeapNode::HeapNode[in-charge]()': : undefined reference to
TR> `FibHeapNode::FibHeapNode[not-in-charge]()' collect2: ld returned
TR> 1 exit status

Prøv at skrive g++ i stedet for gcc. Hvis det ikke virker, så prøv at
fortælle lidt mere om, hvad du gør.


/Benny


Thomas Rasmussen (11-05-2003)
Kommentar
Fra : Thomas Rasmussen


Dato : 11-05-03 10:41

Benny Amorsen <benny+nospam@amorsen.dk> writes:

> Prøv at skrive g++ i stedet for gcc. Hvis det ikke virker, så prøv at
> fortælle lidt mere om, hvad du gør.

Jeg bruger /usr/bin/c++ så det skulle ikke være et problem. Jeg må
ærlig indrømme at jeg ikke kan gennemskue hvad der går galt, andet end
at lige netop den kode åbenbart ikke er GCC 3 kompatibel Det er
noget gammel C++ kode vi har lånt fra et andet program, men jeg syntes
bare at det skulle være til at få til at virke alligevel, men der er
åbenbart flere om at bestemme der

/Thomas

--
/"\ | Human Knowledge Belongs To The World
\ / | -- Milo Hoffman in "AntiTrust"
x |
/ \ <-- (ASCII Ribbon Campain against html emails and postings!)

Søg
Reklame
Statistik
Spørgsmål : 177551
Tips : 31968
Nyheder : 719565
Indlæg : 6408843
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste