Thread overview
Dparser link error
Mar 20, 2007
Knud Soerensen
Mar 20, 2007
Frits van Bommel
Mar 25, 2007
Knud Soerensen
March 20, 2007
Hi

I am trying to link the mars.d program which come with Dparser and i get the following errors.

../dparser/dparser.dmd.Aggregate.o: In function `_D7dparser3dmd9Aggregate11accessCheckFS7dparser3dmd4Root3LocC7dparser3dmd5Scope5ScopeC7dparser3dmd10Expression10ExpressionC7dparser3dmd11Declaration11DeclarationZv':
../dparser/dmd/Aggregate.d:(.gnu.linkonce.t_D7dparser3dmd9Aggregate11accessCheckFS7dparser3dmd4Root3LocC7dparser3dmd5Scope5ScopeC7dparser3dmd10Expression10ExpressionC7dparser3dmd11Declaration11DeclarationZv+0xad): undefined reference to `_D22TypeInfo_B10AaAaAaAaAa6__initZ'
../dparser/dparser.dmd.ScopeSymbol.o: In function `_D7dparser3dmd11ScopeSymbol12ScopeDSymbol15multiplyDefinedFS7dparser3dmd4Root3LocC7dparser3dmd6Symbol7DSymbolC7dparser3dmd6Symbol7DSymbolZv':
../dparser/dmd/ScopeSymbol.d:(.gnu.linkonce.t_D7dparser3dmd11ScopeSymbol12ScopeDSymbol15multiplyDefinedFS7dparser3dmd4Root3LocC7dparser3dmd6Symbol7DSymbolC7dparser3dmd6Symbol7DSymbolZv+0x85): undefined reference to `_D22TypeInfo_B10AaAaAaAaAa6__initZ'
collect2: ld returned 1 exit status
--- errorlevel 1

Does anybody know what the problem is ??

The last error seems to referrer to the following function can anyone spot the error ??

	static void multiplyDefined(Loc loc, DSymbol s1, DSymbol s2)
	{
	    //printf("s1 = '%s'\n", s1.toChars());
	    //printf("s2 = '%s', parent = %p\n", s2.toChars(), s2.parent);
	//	#if 1
	    s1.error( "conflicts with %s at %s", s2.toPrettyChars(), s2.locToChars() );
        if (loc.filename)
        {
            .errorLoc(loc, "%s at %s conflicts with %s at %s", s1.toPrettyChars(), s1.locToChars(), s2.toPrettyChars(), s2.locToChars());
        }
        else
        {
	        s1.errorLoc(loc, "conflicts with %s at %s", s2.toPrettyChars(), s2.locToChars());
        }
	}
March 20, 2007
Knud Soerensen wrote:
> Hi 
> 
> I am trying to link the mars.d program which come with Dparser
> and i get the following errors.
> 
[snip]: undefined reference to `_D22TypeInfo_B10AaAaAaAaAa6__initZ'
> collect2: ld returned 1 exit status
> --- errorlevel 1
> 
> Does anybody know what the problem is ??

That's the TypeInfo for a tuple(char[],char[],char[],char[],char[]), probably from:

>             .errorLoc(loc, "%s at %s conflicts with %s at %s", s1.toPrettyChars(), s1.locToChars(), s2.toPrettyChars(), s2.locToChars());

Is that function by any chance declared as something like "void errorLoc(Loc, ...)"?
(IIRC TypeInfo for tuples is used to pass varargs, and this is the only function call with >= 5 parameters)

As to why that TypeInfo doesn't get emitted, that may be a long story.
What is your compiler command line? (including compiler please)
Do you use -c to compile files one-by-one and then link or do you just pass all files at the same time? Whichever it is, does this error disappear if you switch?
March 25, 2007
On Tue, 20 Mar 2007 23:44:16 +0100, Frits van Bommel wrote:

> Knud Soerensen wrote:
>> Hi
>> 
>> I am trying to link the mars.d program which come with Dparser and i get the following errors.
>> 
> [snip]: undefined reference to `_D22TypeInfo_B10AaAaAaAaAa6__initZ'
>> collect2: ld returned 1 exit status
>> --- errorlevel 1
>> 
>> Does anybody know what the problem is ??
> 
> That's the TypeInfo for a tuple(char[],char[],char[],char[],char[]),
> probably from:
> 
>>             .errorLoc(loc, "%s at %s conflicts with %s at %s",
>>             s1.toPrettyChars(), s1.locToChars(), s2.toPrettyChars(),
>>             s2.locToChars());
> 
> Is that function by any chance declared as something like "void
> errorLoc(Loc, ...)"?
> (IIRC TypeInfo for tuples is used to pass varargs, and this is the only
> function call with >= 5 parameters)
> 
> 
Yes, it is defined like
// print an error message for a location void errorLoc( Loc loc, ... )
{
    if( !global.gag )
    {
		doError(loc, _arguments, _argptr);
    }
}

> As to why that TypeInfo doesn't get emitted, that may be a long story. What is your compiler command line? (including compiler please)
dmd mars.d -I../ ../dparser/dparser.*.o ArgParser.o gcc mars.o
../dparser/dparser.dmd.Aggregate.o ../dparser/dparser.dmd.Array.o
../dparser/dparser.dmd.Attrib.o ../dparser/dparser.dmd.BackEnd.o
../dparser/dparser.dmd.Class.o ../dparser/dparser.dmd.Condition.o
../dparser/dparser.dmd.Declaration.o ../dparser/dparser.dmd.Doc.o
../dparser/dparser.dmd.Dump.o ../dparser/dparser.dmd.entity.o
../dparser/dparser.dmd.Enum.o ../dparser/dparser.dmd.Expression.o
../dparser/dparser.dmd.Func.o ../dparser/dparser.dmd.globals.o
../dparser/dparser.dmd.Identifier.o ../dparser/dparser.dmd.ID.o
../dparser/dparser.dmd.impcnvtab.o ../dparser/dparser.dmd.Import.o
../dparser/dparser.dmd.Initializer.o ../dparser/dparser.dmd.Inline.o
../dparser/dparser.dmd.Keyword.o ../dparser/dparser.dmd.Lexer.o
../dparser/dparser.dmd.Macro.o ../dparser/dparser.dmd.Module.o
../dparser/dparser.dmd.OutBuffer.o ../dparser/dparser.dmd.Package.o
../dparser/dparser.dmd.Parse.o ../dparser/dparser.dmd.Root.o
../dparser/dparser.dmd.Scope.o ../dparser/dparser.dmd.ScopeSymbol.o
../dparser/dparser.dmd.Statement.o ../dparser/dparser.dmd.StaticAssert.o
../dparser/dparser.dmd.Struct.o ../dparser/dparser.dmd.Symbol.o
../dparser/dparser.dmd.Template.o ../dparser/dparser.dmd.Token.o
../dparser/dparser.dmd.Tokens.o ../dparser/dparser.dmd.TypeInfo.o
../dparser/dparser.dmd.Type.o ../dparser/dparser.dmd.Types.o
../dparser/dparser.dmd.unialpha.o ../dparser/dparser.dmd.Version.o
../dparser/dparser.DParser.o ../dparser/dparser.Error.o
../dparser/dparser.SymbolDisplay.o ../dparser/dparser.SymbolListing.o
../dparser/dparser.Visitor.o ArgParser.o -o mars -m32 -lphobos -lpthread
-lm -Xlinker -L/home/knud/dsss/lib ../dparser/dparser.dmd.Aggregate.o: In
function
`_D7dparser3dmd9Aggregate11accessCheckFS7dparser3dmd4Root3LocC7dparser3dmd5Scope5ScopeC7dparser3dmd10Expression10ExpressionC7dparser3dmd11Declaration11DeclarationZv':
../dparser/dmd/Aggregate.d:(.gnu.linkonce.t_D7dparser3dmd9Aggregate11accessCheckFS7dparser3dmd4Root3LocC7dparser3dmd5Scope5ScopeC7dparser3dmd10Expression10ExpressionC7dparser3dmd11Declaration11DeclarationZv+0xad):
undefined reference to `_D22TypeInfo_B10AaAaAaAaAa6__initZ'
../dparser/dparser.dmd.ScopeSymbol.o: In function
`_D7dparser3dmd11ScopeSymbol12ScopeDSymbol15multiplyDefinedFS7dparser3dmd4Root3LocC7dparser3dmd6Symbol7DSymbolC7dparser3dmd6Symbol7DSymbolZv':
../dparser/dmd/ScopeSymbol.d:(.gnu.linkonce.t_D7dparser3dmd11ScopeSymbol12ScopeDSymbol15multiplyDefinedFS7dparser3dmd4Root3LocC7dparser3dmd6Symbol7DSymbolC7dparser3dmd6Symbol7DSymbolZv+0x85):
undefined reference to `_D22TypeInfo_B10AaAaAaAaAa6__initZ' collect2: ld
returned 1 exit status
--- errorlevel 1


> Do you use -c to compile files one-by-one and then link or do you just pass all files at the same time? Whichever it is, does this error disappear if you switch?
no

dmd -c mars.d -I..
dmd mars.o ../dparser/dparser.*.o ArgParser.o gcc mars.o
../dparser/dparser.dmd.Aggregate.o ../dparser/dparser.dmd.Array.o
../dparser/dparser.dmd.Attrib.o ../dparser/dparser.dmd.BackEnd.o
../dparser/dparser.dmd.Class.o ../dparser/dparser.dmd.Condition.o
../dparser/dparser.dmd.Declaration.o ../dparser/dparser.dmd.Doc.o
../dparser/dparser.dmd.Dump.o ../dparser/dparser.dmd.entity.o
../dparser/dparser.dmd.Enum.o ../dparser/dparser.dmd.Expression.o
../dparser/dparser.dmd.Func.o ../dparser/dparser.dmd.globals.o
../dparser/dparser.dmd.Identifier.o ../dparser/dparser.dmd.ID.o
../dparser/dparser.dmd.impcnvtab.o ../dparser/dparser.dmd.Import.o
../dparser/dparser.dmd.Initializer.o ../dparser/dparser.dmd.Inline.o
../dparser/dparser.dmd.Keyword.o ../dparser/dparser.dmd.Lexer.o
../dparser/dparser.dmd.Macro.o ../dparser/dparser.dmd.Module.o
../dparser/dparser.dmd.OutBuffer.o ../dparser/dparser.dmd.Package.o
../dparser/dparser.dmd.Parse.o ../dparser/dparser.dmd.Root.o
../dparser/dparser.dmd.Scope.o ../dparser/dparser.dmd.ScopeSymbol.o
../dparser/dparser.dmd.Statement.o ../dparser/dparser.dmd.StaticAssert.o
../dparser/dparser.dmd.Struct.o ../dparser/dparser.dmd.Symbol.o
../dparser/dparser.dmd.Template.o ../dparser/dparser.dmd.Token.o
../dparser/dparser.dmd.Tokens.o ../dparser/dparser.dmd.TypeInfo.o
../dparser/dparser.dmd.Type.o ../dparser/dparser.dmd.Types.o
../dparser/dparser.dmd.unialpha.o ../dparser/dparser.dmd.Version.o
../dparser/dparser.DParser.o ../dparser/dparser.Error.o
../dparser/dparser.SymbolDisplay.o ../dparser/dparser.SymbolListing.o
../dparser/dparser.Visitor.o ArgParser.o -o mars -m32 -lphobos -lpthread
-lm -Xlinker -L/home/knud/dsss/lib ../dparser/dparser.dmd.Aggregate.o: In
function
`_D7dparser3dmd9Aggregate11accessCheckFS7dparser3dmd4Root3LocC7dparser3dmd5Scope5ScopeC7dparser3dmd10Expression10ExpressionC7dparser3dmd11Declaration11DeclarationZv':
../dparser/dmd/Aggregate.d:(.gnu.linkonce.t_D7dparser3dmd9Aggregate11accessCheckFS7dparser3dmd4Root3LocC7dparser3dmd5Scope5ScopeC7dparser3dmd10Expression10ExpressionC7dparser3dmd11Declaration11DeclarationZv+0xad):
undefined reference to `_D22TypeInfo_B10AaAaAaAaAa6__initZ'
../dparser/dparser.dmd.ScopeSymbol.o: In function
`_D7dparser3dmd11ScopeSymbol12ScopeDSymbol15multiplyDefinedFS7dparser3dmd4Root3LocC7dparser3dmd6Symbol7DSymbolC7dparser3dmd6Symbol7DSymbolZv':
../dparser/dmd/ScopeSymbol.d:(.gnu.linkonce.t_D7dparser3dmd11ScopeSymbol12ScopeDSymbol15multiplyDefinedFS7dparser3dmd4Root3LocC7dparser3dmd6Symbol7DSymbolC7dparser3dmd6Symbol7DSymbolZv+0x85):
undefined reference to `_D22TypeInfo_B10AaAaAaAaAa6__initZ' collect2: ld
returned 1 exit status
--- errorlevel 1

However if I do.

 dmd mars.d -I../ ../dparser/DParser.d  ../dparser/Error.d
 ../dparser/SymbolDisplay.d  ../dparser/SymbolListing.d
 ../dparser/Visitor.d ../dparser/dmd/Aggregate.d
 ../dparser/dmd/entity.d    ../dparser/dmd/Initializer.d
 ../dparser/dmd/Package.d ../dparser/dmd/Template.d ../dparser/dmd/Array.d
       ../dparser/dmd/Enum.d    ../dparser/dmd/Inline.d
 ../dparser/dmd/Parse.d ../dparser/dmd/Token.d ../dparser/dmd/Attrib.d
   ../dparser/dmd/Expression.d  ../dparser/dmd/Keyword.d
 ../dparser/dmd/Root.d ../dparser/dmd/Tokens.d ../dparser/dmd/BackEnd.d
   ../dparser/dmd/Func.d   ../dparser/dmd/Lexer.d ../dparser/dmd/Scope.d
 ../dparser/dmd/Type.d ../dparser/dmd/Class.d
 ../dparser/dmd/globals.d    ../dparser/dmd/Link.d
 ../dparser/dmd/ScopeSymbol.d ../dparser/dmd/TypeInfo.d
 ../dparser/dmd/Condition.d    ../dparser/dmd/ID.d
 ../dparser/dmd/Macro.d  ../dparser/dmd/Statement.d ../dparser/dmd/Types.d
 ../dparser/dmd/Declaration.d  ../dparser/dmd/Identifier.d
 ../dparser/dmd/StaticAssert.d ../dparser/dmd/unialpha.d
 ../dparser/dmd/Doc.d      ../dparser/dmd/impcnvtab.d
 ../dparser/dmd/Module.d  ../dparser/dmd/Struct.d ../dparser/dmd/Version.d
 ../dparser/dmd/Dump.d       ../dparser/dmd/Import.d
 ../dparser/dmd/OutBuffer.d ../dparser/dmd/Symbol.d ArgParser.d

everything compiles ok.