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