D - Link error using template in library - 1 attachment
- Patrick Down (223/223) Apr 20 2003 I'm getting a linker error while trying to make
I'm getting a linker error while trying to make
a library that uses a template.
---------------------------------------------------------
Here is the template library file: temp.d
---------------------------------------------------------
Z:\D\errreport1>type temp.d
module temp;
template Foo(Type)
{
bit isSorted(Type[] array, int delegate(Type a,Type b) cmp)
{
for(int i = 1; i < array.length; ++i)
{
if(cmp(array[i-1],array[i]) > 0)
return false;
}
return true;
}
void insertionSort(Type array[], int delegate(Type a,Type b) cmp)
in
{
assert(cmp);
}
out
{
assert(isSorted(array,cmp));
}
body
{
for (int i=1; i < array.length; i++)
{
Type index = array[i];
int j = i;
while ((j > 0) && cmp(index,array[j-1]) == -1)
{
array[j] = array[j-1];
j = j - 1;
}
array[j] = index;
}
}
}
---------------------------------------------------------
Compile it and make it into a library
---------------------------------------------------------
Z:\D\errreport1>dmd -c temp.d
Z:\D\errreport1>lib -c temp.lib temp.obj
Digital Mars Librarian Version 8.00n
Copyright (C) Digital Mars 2000-2002 All Rights Reserved
www.digitalmars.com
Digital Mars Librarian complete.
---------------------------------------------------------
Here is the library that uses the template: usetemp.d
---------------------------------------------------------
Z:\D\errreport1>type usetemp.d
module usetemp;
import temp;
alias instance Foo(int).insertionSort intSort;
void bar(int[] arr)
{
intSort(arr,
delegate int(int a,int b)
{
if(a < b) return -1;
else if(a == b) return 0;
else return 1;
});
}
---------------------------------------------------------
Compile it and make it into a library
---------------------------------------------------------
Z:\D\errreport1>dmd -c usetemp.d
Z:\D\errreport1>lib -c usetemp.lib usetemp.obj
Digital Mars Librarian Version 8.00n
Copyright (C) Digital Mars 2000-2002 All Rights Reserved
www.digitalmars.com
Digital Mars Librarian complete.
---------------------------------------------------------
Here is the test file
---------------------------------------------------------
Z:\D\errreport1>type err.d
import usetemp;
int main(char[][] argv)
{
int[] test;
test ~= 5;
test ~= 12;
test ~= 1;
test ~= 3;
test ~= 15;
test ~= 45;
test ~= 12;
test ~= 9;
bar(test);
return 0;
}
---------------------------------------------------------
Try to put it all together and get a linker error
---------------------------------------------------------
Z:\D\errreport1>dmd err.d usetemp.lib temp.lib
Z:\tools\dmd\bin\link.exe err,,,usetemp.lib+temp.lib+user32+kernel32/noi;
OPTLINK (R) for Win32 Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved
temp.lib
Warning 140: Library probably needs FIXLIB
usetemp.lib(usetemp)
Error 42: Symbol Undefined _assert_temp
usetemp.lib(usetemp)
Error 42: Symbol Undefined _array_temp
--- errorlevel 2
---------------------------------------------------------
Try compiling in the template directly same problem
---------------------------------------------------------
Z:\D\errreport1>dmd err.d usetemp.lib temp.d
Z:\tools\dmd\bin\link.exe err+temp,,,usetemp.lib+user32+kernel32/noi;
OPTLINK (R) for Win32 Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved
usetemp.lib(usetemp)
Error 42: Symbol Undefined _assert_temp
usetemp.lib(usetemp)
Error 42: Symbol Undefined _array_temp
--- errorlevel 2
---------------------------------------------------------
Finally this works
---------------------------------------------------------
Z:\D\errreport1>dmd err.d usetemp.d temp.d
Z:\tools\dmd\bin\link.exe err+usetemp+temp,,,user32+kernel32/noi;
---------------------------------------------------------
DMD version
---------------------------------------------------------
Z:\D\errreport1>dmd
Digital Mars D Compiler Beta v0.61
Copyright (c) 1999-2003 by Digital Mars written by Walter Bright
www.digitalmars.com/d/index.html
Usage:
dmd files.d ... { -switch }
files.d D source files
-c do not link
-d allow deprecated features
-g add symbolic debug info
-gt add trace profiling hooks
-v verbose
-O optimize
-oobjdir write .obj files to directory objdir
-Ipath where to look for imports
-Llinkerflag pass linkerflag to link
-debug compile in debug code
-debug=level compile in debug code <= level
-debug=ident compile in debug code identified by ident
-inline do function inlining
-release compile release version
-unittest compile in unit tests
-version=level compile in version code >= level
-version=ident compile in version code identified by ident
begin 644 errreport1.zip
M(Z5(:=QT+=(.&S_8).^%O+>'I\' ,T>W\[.T$E0);B'!R;S(A).0J:D5= ,S
ME<E]WH[3;N=Z=5M&M]/M/-H_>6;-W(H\5WI^<G BK;6R,-:-'KA-(<,I0+RY
M29>9WSF =;=3W^RQ,;V7R!YU.W]V.P!3Y?#V
M<Y1C$H ^_TTC2/(B(G'6`3`SMD?L"B8P.L"_^UY)G$D]=XL#V-E1D6<-$ !J
M5D:E:$HIK5-&DZ'!%C[L]-/,5+IAK"A)&5T^JHX",$OW(4OM6.]1DFB(3$VZ
M:?L0O!,G5[I0[>Q<=B%?4^E4OD._5]X[J!V,NLZ0H.J=]0+S$7J],W8PW+I%
MG"=F>H:"AVJNG,C B;`E'/.]E=#PF
MP^$`?\;P8Y;!<V(JX;G$A%S)%-;K=9QZ]ARYX\3D6\]$6I%))V,JLNM=M&6T
M(;)"1K<0#I:E;`/G/FU]';BL#VHB9M ,H*ERXF_"J,B4*`E-G-")!U/,L"AN
MX0LE'?T'&0: J6"`].!:86_ (W3H^VJH<(A(C`6B3[^(1*'RH8&>`B$"*0'Y
M! :%5$B4'H.K.0+EN$ECK!="[XG<`K`>;V7MXQ_32FV`_P)U5 )T+*:_R]J
MTLG2<:MRTS6'ZQ".NK N51PF>RZ4[B4+8=^<<KG,5XUZP1VZ+3\>?.V_)G"W
MM1J-V\O6:K=-:TO>^:BB/5[QNXVU3+M1O5/7UY>_8R\)&PT42\?U ]GBS%QB
ME"P7$TZYAO0Y;J`[C;WA0O(A:Y9&/>EV9%O8&9.5)RAU,E7ZA"X9RW<<]7Z_
M^B&^.WPX^FC!C?;N[6$? B4W JMJC '/M\5T$5R^%E:C$3"Z,]P/];:!PIJI
M7?I/<HZS[%+B?>M\^V_ES6.E$:"HE\.'9&WL>?E5TR+]G*0(PHWDN"(AKK_M
MY9S4M/]:9(ZTL%BW<T5S<CN]S9]P\<+E6;?SJA1SN4\93C&B/J+$H,1QC.WJ
MFE(RY6F+8 JG<O6')QEL(Q%&`XE\+8%;2[:;WGL/L :!V+.RV%$AW*+6N%Y0
M_J[6'C8N2 Z9EIIRN70?&$ $[N="*+U,,+'!%PC^Q ^:)E8BWLAM(E<:^3=0
M2P,$%````` `%HJ4+JC[FTAR````X`````4```!E<G(N9./EXN7*S"W(+RI1
M*"U.+4G-+;#FY0+!S+P2A=S$S#R-Y(S$HNC8Z%B%Q*+T,DU>KFI>+ 4%H"Q0
MI"2UN,0:Q`4Q%.IL%4Q1>(9&J%P4GC&J'*I.$[P&68)Y()R46*0!$M6$BQ2E
MEI06Y2D8``5J0=X``%!+`P04````"``(D)0N?U?N4#H!``"Z` ``! ```'1E
M3^9<(,N(!^C<`="1V2G,X_:TW57Y'%8<C[CG"P[0PDQ:XEAWHRA"^GJKAFC&
M&#T
ML6HYJ.;RW4,$$\L_+:0L^VFAOR;)1GQ8WQ?WBFBPG=7:`L7,^YGLLV"L]09C
MLW$"F1\PF]_:/7"4);:[N(!(AYFCK2*=PQ>WNJ-KL;5O8,G%1:U:/>%ZD?;G
M< 13I$3#V& EQPYCX`0[ LYB!.MC0O\DN(9069_,,1/B9(._22$CF6OG$VP/
MN=E"<I&*T;8[Y?1GK' K+B:OO)2_?P%02P,$%````` `Y).4+MN+FV(+`0``
M,9JD^/:1U"K$BU(H8ZK5S("?WN,;ZX#C%&#WU]-WARKPBH1 $O"$P.BB58Q
M[33LQKO[+'QO2UV+,'R(Y7KDTG#PI! N"=>T]F4DRTA2\%\P/03X)M4FI6WU
M5KP8$]=_1XH'$ FR>"^K%"!>N.*P-G=GS,:ILLEE1>+G/, W!Q+B4E.L0+1"
M^_AVA"M2,L'+&.Z[&U!+`0(4`!0````(`"*4E"YP:J'A=P4``&,4```*````
M``````$`(`"V 0````!R97!O<G0N='AT4$L!`A0`%````` `%HJ4+JC[FTAR
M````X`````4``````````0` `+:!GP4``&5R<BYD4$L!`A0`%````` `")"4
M+G]7[E`Z`0``N (```8``````````0` `+:!-`8``'1E;7`N9%!+`0(4`!0`
M```(`)R,E"XJH;RNH0```!,!```)``````````$`(`"V 9('``!U<V5T96UP
M+F102P$"%``4````"`#DDY0NVXN
A"```9&5M;RYB87102P4&``````4`!0`,`0``BPD`````
`
end
Apr 20 2003








Patrick Down <pat codemoon.com>