surprised by link error

Daniel Davidson nospam at spam.com
Wed Oct 16 07:08:34 PDT 2013


The following code runs fine. There is a whole bunch of types 
imported, so whittling it down to the problem is not too easy.

import plus.models.assumption;
import pprint.pp;
import std.stdio;
import std.datetime;

void main() {
   immutable am = AssumptionModel();
   writeln(pp(am));
}

That code writes a formatted view of the assumption model. One 
small code change:

     writeln(pp(am)); => writeln(pp(&am));

Does not cause a compile error, but rather a link error (using 
rdmd even with --force):

How is this possible?

Link Error:

       --- errorlevel 1
       | Undefined symbols for architecture x86_64:
       |   
"_D44TypeInfo_HAyayS4plus6models6common9RateCurve6__initZ", 
referenced from:
       |       
_D6object58__T16AssociativeArrayTAyaTyS4plus6models6common9RateCurveZ16AssociativeArray6rehashMFNdZHAyayS4plus6models6common9RateCurve 
in linkerror.o
       |   
"_D56TypeInfo_HAyayS4plus6models10assumption15DateAssumptions6__initZ", 
referenced from:
       |       
_D6object70__T16AssociativeArrayTAyaTyS4plus6models10assumption15DateAssumptionsZ16AssociativeArray6rehashMFNdZHAyayS4plus6models10assumption15DateAssumptions 
in linkerror.o
       |   
"_D57TypeInfo_HAyayS4plus6models10assumption16AssetAssumptions6__initZ", 
referenced from:
       |       
_D6object71__T16AssociativeArrayTAyaTyS4plus6models10assumption16AssetAssumptionsZ16AssociativeArray6rehashMFNdZHAyayS4plus6models10assumption16AssetAssumptions 
in linkerror.o
       |   
"_D61TypeInfo_HAyayS4plus6models10assumption20LiabilityAssumptions6__initZ", 
referenced from:
       |       
_D6object75__T16AssociativeArrayTAyaTyS4plus6models10assumption20LiabilityAssumptionsZ16AssociativeArray6rehashMFNdZHAyayS4plus6models10assumption20LiabilityAssumptions 
in linkerror.o
       | ld: symbol(s) not found for architecture x86_64
       | collect2: ld returned 1 exit status


----------------------------------

Original successful output:
{
  (AssumptionModel).inflation = {
   (RateCurve).curveData = [

   ]
  }
  (AssumptionModel).assetAssumptions = {
  }
  (AssumptionModel).liabilityAssumptions = {
  }
  (AssumptionModel).accountGrowthMap = {
  }
  (AssumptionModel).incomeModelOverrides = {
  }
  (AssumptionModel).expenseModelOverrides = {
  }
  (AssumptionModel).dateAssumptions = {
  }
}


More information about the Digitalmars-d-learn mailing list