Re: OT: converting C to C++ : linkng problems
On Tue, Dec 13, 2005 at 02:31:50PM +0100, Joris Huizer wrote:
> Hello,
>
...
> There is this problem: it doesn't link correctly; I get link errors such
> like this:
...
>
> g++ -g -o democomp y.tab.o lex.yy.o debug.o list.o symbol.o syntax.o
> parser.o intermediate.o register.o flowgraph.o dag.o optimize.o
> inttomips.o mips.o -lfl
> y.tab.o(.text+0x46a): In function `yyparse()':
> /home/jorishuizer/zooi/coco3-hack/y.tab.cc:1105: undefined reference to
> `yylex()'
> y.tab.o(.text+0x6dd): In function `yyparse()':
> /home/jorishuizer/zooi/coco3-hack/spascal.y:116: undefined reference to
> `selectEndOfTable'
> <snip ... lots of these >
> Symbols in two files are not found: those in symbol.cc and those in
> lex.yy.cc (generated with flex)
Could it be that those files were compiled with C? C++ oftern doesn't
find C symbols unless they are declared with extern "C". It can even
be necessary to
extern "C"{
#include "a-C-header-file.h"
}
Could it be that the symbols have subtle data-type incompatibility?
C++ has the habit of mangling names to include data-type information,
so a call to a function using one type (perhaps implicitly determined
in teh absencs of a suitable declaration) doesn't reach a function
of the same name with a different type.
Be careful of the difference between
foo();
foo(void);
void foo();
void foo(void);
in C.
Reply to: