www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Can't figure out segfault

reply rm <xenomorph64 gmail.com> writes:
I put together bindings for DevIL in D to use on a school assignment.  The
bindings (attached) work fine on Windows, but cause a segfault on Linux when I
call ilInit.

this can be demonstrated by a little test program

"
import graphics.bindings.devil;

public void main(string[] args)
{
   ilInit();
}
"
compiled with "dmd -L-ldl test.d devil.d" where test.d is the above program
and devil.d is attached.

When run, this program segfaults, but if lines 112,113,165,166 of devil.d are
commented out, the program works fine, and I can't figure out what the problem
with those lines is.  The fact that this works on Windows confuses me even more.

Any help would be appreciated.
begin 644 devil.d
M;6]D=6QE(&=R87!H:6-S+F)I;F1I;F=S+F1E=FEL.PH*:6UP;W)T('-T9"YS
M=')I;F<[" IV97)S:6]N*%=I;F1O=W,I"GL*"6EM<&]R="!S=&0N8RYW:6YD
M;W=S+G=I;F1O=W,["GT*96QS92!V97)S:6]N*&QI;G5X*0I[" EI;7!O<G0 
M<W1D+F,N;&EN=7 N;&EN=7 ["GT*96QS90I[" ES=&%T:6, 87-S97)T*&9A
M;'-E*3L*?0H*<'5B;&EC(&EM;75T86)L92!U:6YT($E,7T-/3$]54E])3D1%

M4E])3D1%6"` ("` (#T ,' Q.3`P.PIP=6)L:6, :6UM=71A8FQE('5I;G0 
M24Q?04Q02$$)"0D (#T ,' Q.3`V.PIP=6)L:6, :6UM=71A8FQE('5I;G0 


M;6UU=&%B;&4 =6EN="!)3%]"1U( ("` ("` ("` ("` (#T ,' X,$4P.PIP



M0T5?04Q02$$ (#T ,' Q.3!!.PH*<'5B;&EC(&EM;75T86)L92!U:6YT($E,
M7T)95$4 ("` ("` ("` (#T


M;75T86)L92!U:6YT($E,7U5.4TE'3D5$7U-(3U)4(#T


M,30P-3L*<'5B;&EC(&EM;75T86)L92!U:6YT($E,7T9,3T%4("` ("` ("` 
M(#T




M(3P 36EC<F]S;V9T(%=I;F1O=W, 0FET;6%P("T +F)M<"!E>'1E;G-I;VX*

M,3L ("\O(3P 1'(N($AA;&\ +2`N8W5T(&5X=&5N<VEO; IP=6)L:6, :6UM
M=71A8FQE('5I;G0 24Q?1$]/32` ("` ("` (#T
M;V]-('=A;&QS("T ;F\ <W!E8VEF:6, 97AT96YS:6]N"G!U8FQI8R!I;6UU

M;TT 9FQA=', +2!N;R!S<&5C:69I8R!E>'1E;G-I;VX*<'5B;&EC(&EM;75T

M<F]S;V9T(%=I;F1O=W, 26-O;G, 86YD($-U<G-O<G, +2`N:6-O(&%N9"`N
M8W5R(&5X=&5N<VEO;G,*<'5B;&EC(&EM;75T86)L92!U:6YT($E,7TI01R` 

M("YJ<&5G(&5X=&5N<VEO;G,*<'5B;&EC(&EM;75T86)L92!U:6YT($E,7TI&


M("A&3U)-($E,0DTI("T +FEF9BP +FEL8FTL("YL8FT 97AT96YS:6]N<PIP
M=6)L:6, :6UM=71A8FQE('5I;G0 24Q?4$-$("` ("` ("` (#T
M.R` +R\A/"!+;V1A:R!0:&]T;T-$("T +G!C9"!E>'1E;G-I;VX*<'5B;&EC

M(3P 6E-O9G0 4$-8("T +G!C>"!E>'1E;G-I;VX*<'5B;&EC(&EM;75T86)L

M+G!I8R!E>'1E;G-I;VX*<'5B;&EC(&EM;75T86)L92!U:6YT($E,7U!.1R` 

M:&EC<R`M("YP;F< 97AT96YS:6]N"G!U8FQI8R!I;6UU=&%B;&4 =6EN="!)

M87` +2`N<&)M+"`N<&=M+"`N<'!M(&%N9"`N<&YM(&5X=&5N<VEO;G,*<'5B

M("\O(3P 4VEL:6-O;B!'<F%P:&EC<R`M("YS9VDL("YB=RP +G)G8B!A;F0 
M+G)G8F$ 97AT96YS:6]N<PIP=6)L:6, :6UM=71A8FQE('5I;G0 24Q?5$=!
M("` ("` ("` (#T
M;&4 +2`N=&=A+"`N=F1A+"`N:6-B(&%N9"`N=G-T(&5X=&5N<VEO;G,*<'5B

M("\O(3P 5&%G9V5D($EM86=E($9I;&4 1F]R;6%T("T +G1I9B!A;F0 +G1I
M9F8 97AT96YS:6]N<PIP=6)L:6, :6UM=71A8FQE('5I;G0 24Q?0TA%040 
M("` ("` (#T
M=&5N<VEO; IP=6)L:6, :6UM=71A8FQE('5I;G0 24Q?4D%7("` ("` ("` 
M(#T


M=&5N<VEO; IP=6)L:6, :6UM=71A8FQE('5I;G0 24Q?5T%,("` ("` ("` 
M(#T
M<VEO; IP=6)L:6, :6UM=71A8FQE('5I;G0 24Q?3$E&("` ("` ("` (#T 

M:6]N"G!U8FQI8R!I;6UU=&%B;&4 =6EN="!)3%]-3D< ("` ("` ("` /2`P

M+2`N;6YG(&5X=&5N<VEO; IP=6)L:6, :6UM=71A8FQE('5I;G0 24Q?2DY'
M("` ("` ("` (#T

M26YT97)C:&%N9V4 1F]R;6%T("T +F=I9B!E>'1E;G-I;VX*<'5B;&EC(&EM

M1&ER96-T1')A=R!3=7)F86-E("T +F1D<R!E>'1E;G-I;VX*<'5B;&EC(&EM

M6E-O9G0 375L=&DM4$-8("T +F1C>"!E>'1E;G-I;VX*<'5B;&EC(&EM;75T

M8F4 4&AO=&]3:&]P("T +G!S9"!E>'1E;G-I;VX*<'5B;&EC(&EM;75T86)L


M+R$\(%!A:6YT4VAO<"!0<F\ +2`N<'-P(&5X=&5N<VEO; IP=6)L:6, :6UM
M=71A8FQE('5I;G0 24Q?4$E8("` ("` ("` (#T
M25  +2`N<&EX(&5X=&5N<VEO; IP=6)L:6, :6UM=71A8FQE('5I;G0 24Q?
M4%A2("` ("` ("` (#T
M96YS:6]N"G!U8FQI8R!I;6UU=&%B;&4 =6EN="!)3%]84$T ("` ("` ("` 


M1CL ("\O(3P 4F%D:6%N8V4 2&EG:"!$>6YA;6EC(%)A;F=E("T +FAD<B!E





M(&5X=&5N<VEO; IP=6)L:6, :6UM=71A8FQE('5I;G0 24Q?5T10"0D)/2`P

M9'` 97AT96YS:6]N"G!U8FQI8R!I;6UU=&%B;&4 =6EN="!)3%]65$8)"0D]

M=&5N<VEO; IP=6)L:6, :6UM=71A8FQE('5I;G0 24Q?5T)-4`D)"3T ,' P


M/"!3=6X 4F%S=&5R("T +G-U;BP +G)A<RP +G)S+"`N:6TQ+"`N:6TX+"`N
M:6TR-"!A;F0 +FEM,S( 97AT96YS:6]N<PIP=6)L:6, :6UM=71A8FQE('5I

M1F]R;6%T("T +FEF9B!E>'1E;G-I;VX*<'5B;&EC(&EM;75T86)L92!U:6YT

M+G1P;"!E>'1E;G-I;VX*<'5B;&EC(&EM;75T86)L92!U:6YT($E,7T9)5%,)

M<W1E;2`M("YF:70 86YD("YF:71S(&5X=&5N<VEO;G,*<'5B;&EC(&EM;75T


M("T +F1C;2!A;F0 +F1I8V]M(&5X=&5N<VEO;G,*<'5B;&EC(&EM;75T86)L

M26YF:6YI='D 5V%R9"!);6%G92`M("YI=VD 97AT96YS:6]N"G!U8FQI8R!I

M<F0 5&5X='5R92!&;W)M870 +2`N8FQP(&5X=&5N<VEO; IP=6)L:6, :6UM

M=&%L.B!&04M+,B!497AT=7)E("T +F9T>"!E>'1E;G-I;VX*<'5B;&EC(&EM

M;&0 ,B`M(%)E;&EC(%1E>'1U<F4 +2`N<F]T(&5X=&5N<VEO; IP=6)L:6, 

M9&EE=F%L($E).B!4;W1A;"!787( 5&5X='5R92`M("YT97AT=7)E(&5X=&5N

M("`O+R$\($1I9VET86P 4&EC='5R92!%>&-H86YG92`M("YD<'  97AT96YS

M("\O(3P 56YR96%L("AA;F0 56YR96%L(%1O=7)N86UE;G0I(%1E>'1U<F4 
M+2`N=71X(&5X=&5N<VEO; IP=6)L:6, :6UM=71A8FQE('5I;G0 24Q?35`S

M,R!E>'1E;G-I;VX*"B\O($]R:6=I;B!$969I;FET:6]N<PIP=6)L:6, :6UM



M1494(#T ,' P-C`R.PIP=6)L:6, :6UM=71A8FQE('5I;G0 24Q?3U))1TE.


M,#L
M,C$[" IP=6)L:6, :6UM=71A8FQE('5I;G0 24Q?24U!1T5?5TE$5$ )/2`P


M*2!V;VED(&9U;F-T:6]N*'-I>F5?="P =6EN="HI(&EL1V5N26UA9V5S.PIP
M=6)L:6, 97AT97)N*%-Y<W1E;2D =F]I9"!F=6YC=&EO;BAU:6YT*2!I;$)I
M;F1);6%G93L*<'5B;&EC(&5X=&5R;BA3>7-T96TI('9O:60 9G5N8W1I;VXH
M=6EN="P =6EN="HI(&EL1&5L971E26UA9V5S.PIP=6)L:6, 97AT97)N*%-Y
M<W1E;2D =F]I9"!F=6YC=&EO;BAU:6YT+"!I;6UU=&%B;&4H8VAA<BDJ*2!I
M;%-A=F4["G!U8FQI8R!E>'1E<FXH4WES=&5M*2!V;VED(&9U;F-T:6]N*&EM
M;75T86)L92AC:&%R*2HI(&EL3&]A9$EM86=E.PIP=6)L:6, 97AT97)N*%-Y
M<W1E;2D =F]I9"!F=6YC=&EO;BAI;6UU=&%B;&4H8VAA<BDJ*2!I;%-A=F5)
M;6%G93L*<'5B;&EC(&5X=&5R;BA3>7-T96TI(&)O;VP 9G5N8W1I;VXH=6EN
M="!W:61T:"P =6EN="!H96EG:'0L('5I;G0 9&5P=& L('5B>71E($)P<"P 
M=6EN="!F;W)M870L('5I;G0 ='EP92P =F]I9"H 9&%T82D :6Q497A);6%G
M93L*<'5B;&EC(&5X=&5R;BA3>7-T96TI('5I;G0 9G5N8W1I;VXH*2!I;$=E
M=$5R<F]R.PIP=6)L:6, 97AT97)N*%-Y<W1E;2D =F]I9"!F=6YC=&EO;B I
M(&EL26YI=#L*<'5B;&EC(&5X=&5R;BA3>7-T96TI(&)O;VP 9G5N8W1I;VXH
M=6EN="D :6Q/<FEG:6Y&=6YC.PIP=6)L:6, 97AT97)N*%-Y<W1E;2D 8F]O
M;"!F=6YC=&EO;BAU:6YT*2!I;$5N86)L93L*<'5B;&EC(&5X=&5R;BA3>7-T
M96TI(&)O;VP 9G5N8W1I;VXH=6EN="D :6Q$:7-A8FQE.PIP=6)L:6, 97AT
M97)N*%-Y<W1E;2D :6YT(&9U;F-T:6]N*'5I;G0I(&EL1V5T26YT96=E<CL*
M<'5B;&EC(&5X=&5R;BA3>7-T96TI('9O:60 9G5N8W1I;VXH=6EN="P =6EN
M="P =6EN="P =6EN="P =6EN="P =6EN="P =6EN="P =6EN="P =F]I9"HI
M(&EL0V]P>5!I>&5L<SL*"G9E<G-I;VXH5VEN9&]W<RD*>PH)<')I=F%T92!(
M04Y$3$4 9&5V:6Q,:6)(86YD;&4["GT*96QS92!V97)S:6]N*&QI;G5X*0I[
M" EP<FEV871E('9O:60J(&1E=FEL3&EB2&%N9&QE.PI]"F5L<V4*>PH)<W1A
M=&EC(&%S<V5R="AF86QS92D["GT*" IP<FEV871E('-T871I8R!T:&ES*"D*
M>PH)=F5R<VEO;BA7:6YD;W=S*0H)>PH)"61E=FEL3&EB2&%N9&QE(#T 3&]A
M9$QI8G)A<GE!*")$979)3"YD;&PB*3L*"0D*"0EI;$=E;DEM86=E<R`](&-A
M<W0H=F]I9"!F=6YC=&EO;BAU:6YT+"!U:6YT*BDI1V5T4')O8T%D9')E<W,H
M9&5V:6Q,:6)(86YD;&4L(")I;$=E;DEM86=E<R(I.PH)"6EL0FEN9$EM86=E
M(#T 8V%S="AV;VED(&9U;F-T:6]N*'5I;G0I*4=E=%!R;V-!9&1R97-S*&1E
M=FEL3&EB2&%N9&QE+"`B:6Q":6YD26UA9V4B*3L*"0EI;$1E;&5T94EM86=E
M<R`](&-A<W0H=F]I9"!F=6YC=&EO;BAU:6YT+"!U:6YT*BDI1V5T4')O8T%D
M9')E<W,H9&5V:6Q,:6)(86YD;&4L(")I;$1E;&5T94EM86=E<R(I.PH)"6EL
M4V%V92`](&-A<W0H=F]I9"!F=6YC=&EO;BAU:6YT+"!I;6UU=&%B;&4H8VAA
M<BDJ*2E'9710<F]C061D<F5S<RAD979I;$QI8DAA;F1L92P (FEL4V%V92(I
M.PH)"6EL4V%V94EM86=E(#T 8V%S="AV;VED(&9U;F-T:6]N*&EM;75T86)L
M92AC:&%R*2HI*4=E=%!R;V-!9&1R97-S*&1E=FEL3&EB2&%N9&QE+"`B:6Q3
M879E26UA9V4B*3L*"0EI;%1E>$EM86=E(#T 8V%S="AB;V]L(&9U;F-T:6]N
M*'5I;G0L('5I;G0L('5I;G0L('5B>71E+"!U:6YT+"!U:6YT+"!V;VED*BDI
M1V5T4')O8T%D9')E<W,H9&5V:6Q,:6)(86YD;&4L(")I;%1E>$EM86=E(BD[
M" D):6Q'971%<G)O<B`](&-A<W0H=6EN="!F=6YC=&EO;B I*4=E=%!R;V-!
M9&1R97-S*&1E=FEL3&EB2&%N9&QE+"`B:6Q'971%<G)O<B(I.PH)"6EL26YI
M="`](&-A<W0H=F]I9"!F=6YC=&EO;B I*4=E=%!R;V-!9&1R97-S*&1E=FEL
M3&EB2&%N9&QE+"`B:6Q);FET(BD[" D):6Q/<FEG:6Y&=6YC(#T 8V%S="AB
M;V]L(&9U;F-T:6]N*'5I;G0I*4=E=%!R;V-!9&1R97-S*&1E=FEL3&EB2&%N
M9&QE+"`B:6Q/<FEG:6Y&=6YC(BD[" D):6Q%;F%B;&4 /2!C87-T*&)O;VP 
M9G5N8W1I;VXH=6EN="DI1V5T4')O8T%D9')E<W,H9&5V:6Q,:6)(86YD;&4L
M(")I;$5N86)L92(I.PH)"6EL1&ES86)L92`](&-A<W0H8F]O;"!F=6YC=&EO
M;BAU:6YT*2E'9710<F]C061D<F5S<RAD979I;$QI8DAA;F1L92P (FEL1&ES
M86)L92(I.PH)"6EL1V5T26YT96=E<B`](&-A<W0H:6YT(&9U;F-T:6]N*'5I
M;G0I*4=E=%!R;V-!9&1R97-S*&1E=FEL3&EB2&%N9&QE+"`B:6Q'971);G1E
M9V5R(BD[" D):6Q,;V%D26UA9V4 /2!C87-T*'9O:60 9G5N8W1I;VXH:6UM
M=71A8FQE*&-H87(I*BDI1V5T4')O8T%D9')E<W,H9&5V:6Q,:6)(86YD;&4L
M(")I;$QO861);6%G92(I.PH)"6EL0V]P>5!I>&5L<R`](&-A<W0H=F]I9"!F
M=6YC=&EO;BAU:6YT+"!U:6YT+"!U:6YT+"!U:6YT+"!U:6YT+"!U:6YT+"!U
M:6YT+"!U:6YT+"!V;VED*BDI1V5T4')O8T%D9')E<W,H9&5V:6Q,:6)(86YD
M;&4L(")I;$-O<'E0:7AE;',B*3L*"7T*"65L<V4 =F5R<VEO;BAL:6YU>"D*
M"7L*"0ED979I;$QI8DAA;F1L92`](&1L;W!E;BAS=&0N<W1R:6YG+G1O4W1R
M:6YG>B B;&EB24PN<V\B*2P 4E1,1%],05I9*3L*"0D*"0EI;$=E;DEM86=E
M<R`](&-A<W0H=F]I9"!F=6YC=&EO;BAU:6YT+"!U:6YT*BDI9&QS>6TH9&5V
M:6Q,:6)(86YD;&4L('-T9"YS=')I;F<N=&]3=')I;F=Z*")I;$=E;DEM86=E
M<R(I*3L*"0EI;$)I;F1);6%G92`](&-A<W0H=F]I9"!F=6YC=&EO;BAU:6YT
M*2ED;'-Y;2AD979I;$QI8DAA;F1L92P <W1D+G-T<FEN9RYT;U-T<FEN9WHH
M(FEL0FEN9$EM86=E(BDI.PH)"6EL1&5L971E26UA9V5S(#T 8V%S="AV;VED
M(&9U;F-T:6]N*'5I;G0L('5I;G0J*2ED;'-Y;2AD979I;$QI8DAA;F1L92P 
M<W1D+G-T<FEN9RYT;U-T<FEN9WHH(FEL1&5L971E26UA9V5S(BDI.PH)"6EL
M4V%V92`](&-A<W0H=F]I9"!F=6YC=&EO;BAU:6YT+"!I;6UU=&%B;&4H8VAA
M<BDJ*2ED;'-Y;2AD979I;$QI8DAA;F1L92P <W1D+G-T<FEN9RYT;U-T<FEN
M9WHH(FEL4V%V92(I*3L*"0EI;%-A=F5);6%G92`](&-A<W0H=F]I9"!F=6YC
M=&EO;BAI;6UU=&%B;&4H8VAA<BDJ*2ED;'-Y;2AD979I;$QI8DAA;F1L92P 
M<W1D+G-T<FEN9RYT;U-T<FEN9WHH(FEL4V%V94EM86=E(BDI.PH)"6EL5&5X
M26UA9V4 /2!C87-T*&)O;VP 9G5N8W1I;VXH=6EN="P =6EN="P =6EN="P 
M=6)Y=&4L('5I;G0L('5I;G0L('9O:60J*2ED;'-Y;2AD979I;$QI8DAA;F1L
M92P <W1D+G-T<FEN9RYT;U-T<FEN9WHH(FEL5&5X26UA9V4B*2D[" D):6Q'
M971%<G)O<B`](&-A<W0H=6EN="!F=6YC=&EO;B I*61L<WEM*&1E=FEL3&EB
M2&%N9&QE+"!S=&0N<W1R:6YG+G1O4W1R:6YG>B B:6Q'971%<G)O<B(I*3L*
M"0EI;$EN:70 /2!C87-T*'9O:60 9G5N8W1I;VXH*2ED;'-Y;2AD979I;$QI
M8DAA;F1L92P <W1D+G-T<FEN9RYT;U-T<FEN9WHH(FEL26YI="(I*3L*"0EI
M;$]R:6=I;D9U;F, /2!C87-T*&)O;VP 9G5N8W1I;VXH=6EN="DI9&QS>6TH
M9&5V:6Q,:6)(86YD;&4L('-T9"YS=')I;F<N=&]3=')I;F=Z*")I;$]R:6=I
M;D9U;F,B*2D[" D):6Q%;F%B;&4 /2!C87-T*&)O;VP 9G5N8W1I;VXH=6EN
M="DI9&QS>6TH9&5V:6Q,:6)(86YD;&4L('-T9"YS=')I;F<N=&]3=')I;F=Z
M*")I;$5N86)L92(I*3L*"0EI;$1I<V%B;&4 /2!C87-T*&)O;VP 9G5N8W1I
M;VXH=6EN="DI9&QS>6TH9&5V:6Q,:6)(86YD;&4L('-T9"YS=')I;F<N=&]3
M=')I;F=Z*")I;$1I<V%B;&4B*2D[" D):6Q'971);G1E9V5R(#T 8V%S="AI
M;G0 9G5N8W1I;VXH=6EN="DI9&QS>6TH9&5V:6Q,:6)(86YD;&4L('-T9"YS
M=')I;F<N=&]3=')I;F=Z*")I;$=E=$EN=&5G97(B*2D[" D):6Q,;V%D26UA
M9V4 /2!C87-T*'9O:60 9G5N8W1I;VXH:6UM=71A8FQE*&-H87(I*BDI9&QS
M>6TH9&5V:6Q,:6)(86YD;&4L('-T9"YS=')I;F<N=&]3=')I;F=Z*")I;$QO
M861);6%G92(I*3L*"0EI;$-O<'E0:7AE;', /2!C87-T*'9O:60 9G5N8W1I
M;VXH=6EN="P =6EN="P =6EN="P =6EN="P =6EN="P =6EN="P =6EN="P 
M=6EN="P =F]I9"HI*61L<WEM*&1E=FEL3&EB2&%N9&QE+"!S=&0N<W1R:6YG

M871I8R!A<W-E<G0H9F%L<V4I.PH)?0I]" IP<FEV871E('-T871I8R!^=&AI
(<R I"GL*?0H`
`
end
Mar 01 2011
next sibling parent "Daniel Murphy" <yebblies nospamgmail.com> writes:
Assuming you've checked that dlopen isn't returning null, I can't find the 
source of the error in that code, sorry.

Unsolicited advice:

Is there any reason you're manually loading the dll rather than using an 
import library?

A couple of remarks about the rest of the code:

Generally in D the constants would all be:
enum uint IL_BLAH = BLAH;
rather than immutable.

You can specify attributes such as public and immutable in blocks

public immutable
{
   // lots of constants
}

Or if using enums, the following will have the same effect.

enum : uint
{
   constant1 = value,
   constant2 = value,
}


All of your function pointers are currently thread local, as are the static 
ctor/dtors.
To have them run once rather than once per thread, you should use 'shared 
static this()' and 'shared static ~this()' instead, and mark the function 
pointer variables as __gshared.

In all of the 'pointer = cast(function pointer)dlsym(...);' calls you're 
actually relying on a compiler bug, as you're assigning a 'extern(D) 
something function(args)' to a 'extern(System) something function(args)'.

For shorter, clearer and correct code you could instead use:
blah = cast(typeof(blah))dlsym(...);

You don't need to call std.string.toStringz on string literals, they're 
guaranteed to be null-terminated.

All the function signatures using immutable (void 
function(immutable(char)*), etc) are incorrect.  C or C++ function 
signatures should be using const instead (eg void function(const(char)*) ).

I really suggest using an import library if possible. 
Mar 02 2011
prev sibling parent Mike Wey <mike-wey example.com> writes:
On 03/02/2011 01:49 AM, rm wrote:
 I put together bindings for DevIL in D to use on a school assignment.  The
 bindings (attached) work fine on Windows, but cause a segfault on Linux when I
 call ilInit.

 this can be demonstrated by a little test program

 "
 import graphics.bindings.devil;

 public void main(string[] args)
 {
     ilInit();
 }
 "
 compiled with "dmd -L-ldl test.d devil.d" where test.d is the above program
 and devil.d is attached.

 When run, this program segfaults, but if lines 112,113,165,166 of devil.d are
 commented out, the program works fine, and I can't figure out what the problem
 with those lines is.  The fact that this works on Windows confuses me even
more.

 Any help would be appreciated.
On linux the linker is called with --export-dynamic by default and this tells the linker to export all the symbols pressent in your executable. So it is posible that dlsym is returning the address of the symbols in your execuable. Thunderbird is having some problems with your attachment so i'm not able to test, but renaming the functions should do the trick. -- Mike Wey
Mar 02 2011