March 25, 2013
Where or to whom should I report a bug in the thrift D bindings?

In recent ubuntu, the maintainers inexplicably changed the linker (ld) defaults to --as-needed, which breaks the 'make check' for Thrifts D binding, presumably because they are using some kind of 'indirect' linking.

reproduction:

~/pkg/thrift/thrift/lib/d$ make check # using dmd 2.062 on x86_64. (thrift at a recent version; 3c434ab87d).
...
dmd -gc -ofunittest/debug/thrift/server/transport/ssl -unittest -w -wi -I../../lib/d/src -L-levent -L-lssl -L-lcrypto src/thrift/server/transport/ssl.d libthriftd-event.a libthriftd-ssl.a libthriftd.a unittest/emptymain.d
libthriftd-ssl.a(ssl_3cd_3af.o): In function `_D6thrift9transport3ssl10TSSLSocket6isOpenMFNdZb':
src/thrift/transport/ssl.d:(.text._D6thrift9transport3ssl10TSSLSocket6isOpenMFNdZb+0x71): undefined refe\
rence to `SSL_get_shutdown'
...

I can fix this by

1. putting "DFLAGS_PRE=-L--no-as-needed" in dmd.conf and using a dmd branch that makes DFLAGS_PRE work: https://github.com/glycerine/dmd/tree/fix_9805 All this does is pre-pend (instead of append) the contents of DFLAGS_PRE to the dmd command line.

or

2. manually compiling with dmd --no-as-needed ... (which is painful, hence the #1 step above is vastly preferred)

but somebody smarter than me should probably have a look at the linking in the 'make check' for D's thrift bindings and try to make it work even without --no-as-needed.

-J
March 26, 2013
Am Mon, 25 Mar 2013 19:43:11 +0100
schrieb "J" <notavail@notavailable.com>:

> Where or to whom should I report a bug in the thrift D bindings?
> 
> In recent ubuntu, the maintainers inexplicably changed the linker (ld) defaults to --as-needed, which breaks the 'make check' for Thrifts D binding, presumably because they are using some kind of 'indirect' linking.
> 
> reproduction:
> 
> ~/pkg/thrift/thrift/lib/d$ make check # using dmd 2.062 on
> x86_64. (thrift at a recent version; 3c434ab87d).
> ...
> dmd -gc -ofunittest/debug/thrift/server/transport/ssl -unittest
> -w -wi -I../../lib/d/src -L-levent -L-lssl -L-lcrypto
> src/thrift/server/transport/ssl.d libthriftd-event.a
> libthriftd-ssl.a libthriftd.a unittest/emptymain.d
> libthriftd-ssl.a(ssl_3cd_3af.o): In function
> `_D6thrift9transport3ssl10TSSLSocket6isOpenMFNdZb':
> src/thrift/transport/ssl.d:(.text._D6thrift9transport3ssl10TSSLSocket6isOpenMFNdZb+0x71):
> undefined refe\
> rence to `SSL_get_shutdown'
> ...
> 
> I can fix this by
> 
> 1. putting "DFLAGS_PRE=-L--no-as-needed" in dmd.conf and using a dmd branch that makes DFLAGS_PRE work: https://github.com/glycerine/dmd/tree/fix_9805 All this does is pre-pend (instead of append) the contents of DFLAGS_PRE to the dmd command line.
> 
> or
> 
> 2. manually compiling with dmd --no-as-needed ... (which is painful, hence the #1 step above is vastly preferred)
> 
> but somebody smarter than me should probably have a look at the linking in the 'make check' for D's thrift bindings and try to make it work even without --no-as-needed.
> 
> -J

David Nadlinger maintains the Thrift bindings. If he doesn't see this thread you can contact him here: http://klickverbot.at/about/