December 06, 2013 [dmd-internals] Linker errors with g++ | ||||
---|---|---|---|---|
| ||||
Attachments:
| I've almost gotten DDMD to link on 64-bit linux, but there's an annoying difference with g++ vs dmc. ../dmd/src/glue.a(e2ir.o):(.rodata._ZTV9SymbolExp[_ZTV9SymbolExp]+0x90): undefined reference to `Expression::toString()' ../dmd/src/glue.a(e2ir.o):(.rodata._ZTV9SymbolExp[_ZTV9SymbolExp]+0xe0): undefined reference to `Expression::inferType(Type*, int, Scope*, Array<TemplateParameter>*)' ../dmd/src/glue.a(e2ir.o):(.rodata._ZTV9SymbolExp[_ZTV9SymbolExp]+0x170): undefined reference to `Expression::buildArrayIdent(OutBuffer*, Array<Expression>*)' ../dmd/src/glue.a(e2ir.o):(.rodata._ZTV9SymbolExp[_ZTV9SymbolExp]+0x178): undefined reference to `Expression::buildArrayLoop(Array<Parameter>*)' ../dmd/src/glue.a(tocsym.o):(.rodata._ZTV17SymbolDeclaration[_ZTV17SymbolDeclaration]+0x188): undefined reference to `Dsymbol::addComment(unsigned char const*)' ../dmd/src/glue.a(tocsym.o):(.rodata._ZTV24TypeInfoClassDeclaration[_ZTV24TypeInfoClassDeclaration]+0x188): undefined reference to `Dsymbol::addComment(unsigned char const*)' ../dmd/src/glue.a(typinf.o):(.rodata._ZTV24TypeInfoConstDeclaration[_ZTV24TypeInfoConstDeclaration]+0x188): undefined reference to `Dsymbol::addComment(unsigned char const*)' ../dmd/src/glue.a(typinf.o):(.rodata._ZTV28TypeInfoInvariantDeclaration[_ZTV28TypeInfoInvariantDeclaration]+0x188): undefined reference to `Dsymbol::addComment(unsigned char const*)' ../dmd/src/glue.a(typinf.o):(.rodata._ZTV25TypeInfoSharedDeclaration[_ZTV25TypeInfoSharedDeclaration]+0x188): undefined reference to `Dsymbol::addComment(unsigned char const*)' ../dmd/src/glue.a(typinf.o):(.rodata._ZTV23TypeInfoWildDeclaration[_ZTV23TypeInfoWildDeclaration]+0x188): more undefined references to `Dsymbol::addComment(unsigned char const*)' follow These appear to happen because a class (SymbolExp) has a member function written in e2ir.c, and g++ is writing out the full vtable complete with references to the actual functions, whereas dmc just references the vtable symbol. It then fails because eg toString was renamed to _toString, templated structs are currently mangled wrong, unsigned char is mangled differently to 'char' etc Is there a way anyone knows of to make g++ just reference the vtable symbol, and not re-emit the contents? Thanks, Daniel |
Copyright © 1999-2021 by the D Language Foundation