<div dir="ltr">On Sat, Jun 4, 2016 at 1:48 AM, Travis Whitaker <span dir="ltr"><<a href="mailto:pi.boy.travis@gmail.com" target="_blank">pi.boy.travis@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Suppose I have some module Foo with foreign exports. On some platforms I can do something like:<div><br></div><div>ghc -static -shared Foo.o ...</div><div><br></div><div>The resulting shared library would have the base libraries and the RTS statically linked in. From what I understand this is possible on BSDs because generating PIC is the default there (for making PIEs I'd imagine), and possible on Windows because the dynamic loading process involves some technique that doesn't require PIC. On Linux (at least x86_64) this doesn't work by default since libHSbase, libHSrts et al. are not built with -fPIC unless one specifically asks for it when building GHC. As far as I know this is the only way to get -static -shared to work on this platform.</div></div></blockquote><div><br></div><div>I believe that's all correct. Incidentally there was just a related post on reddit yesterday:<br><a href="https://www.reddit.com/r/haskell/comments/4my2cn/a_story_of_how_i_built_static_haskell_libraries/" target="_blank">https://www.reddit.com/r/haskell/comments/4my2cn/a_story_of_how_i_built_static_haskell_libraries/</a><br> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>While the use cases for such stand-alone shared libraries might be small niches, I was curious whether or not there was any discussion about potential strategies for making it easier to build them for Linux. At the very least, perhaps a single switch for the configure script or <a href="http://build.mk" target="_blank">build.mk</a> to make it easier to build GHC+libs with -fPIC on Linux.</div></div></blockquote><div><br></div><div>That's certainly a good idea. Mind filing a ticket?<br><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Another step up might be providing *_PIC.a objects for the base libraries, so that the non-PIC objects are still available for the majority of cases in which PIC is not required.</div></div></blockquote><div><br></div><div>I think we don't do this mainly because it would inflate the size of the binary distribution significantly for something that is, as you say, rather a niche use case.<br><br></div><div>Regards,<br></div><div>Reid Barton<br></div></div></div></div>