One thing I don't get is how, for GHC on Mac, this seems to work
with out any fiddling at all; but on Linux it's really quite
challenging.

--
Jason Dusek
()  ascii ribbon campaign - against html e-mail
/\  www.asciiribbon.org   - against proprietary attachments



2011/12/1 Irene Knapp <ireney.kn...@gmail.com>:
> Please note that when we build with in-tree GMP, we statically link it into 
> libHSinteger-GMP.a.  Also, again only with in-tree, we patch it first to use 
> our allocator.  Both of these things are to make life easier for users 
> creating hybrid Haskell/C executables who need to use GMP from the C side, 
> which is possible only by linking in a second copy of it.
>
> The typical trick to force GHC to statically link a C library is to give the 
> full path to the .a of it as one of the object files in the GHC invocation 
> that does the final linking.  This means you don't need any -l or -L flags 
> pertaining to that library.  Some libraries are very particular about the 
> order you list them in when doing this, but I don't really understand the 
> issues there.  You usually will also have to chase dependencies by hand and 
> list them in the same fashion.
>
> Good luck!
>
> Sent from my iPhone
>
> On Dec 1, 2011, at 3:08 AM, "Edward Z. Yang" <ezy...@mit.edu> wrote:
>
>> libgmp and libffi are external libraries not associated with
>> Haskell, so I don't think -static (which is for Haskell libraries)
>> applies to them.  You'll have the same problem with any other
>> sort of library of this type, like libdl and friends ;-)
>>
>> Edward
>>
>> Excerpts from Jason Dusek's message of Sat Nov 26 01:59:18 -0500 2011:
>>> Some time ago, I wrote to this list about making shared
>>> libraries with GHC, in such a way that the RTS was linked and
>>> ready to go. Recently, I've been looking a similar but, in a
>>> sense, opposite problem: linking Haskell executables with some
>>> of their non-Haskell dependencies, for distribution.
>>>
>>> I tried passing a few different sets of options to the linker
>>> through GHC, with -optl:
>>>
>>>  -optl'-Wl,-r'
>>>  -optl'-Wl,-r,-dy'
>>>  -optl'-Wl,-static,-lffi,-lgmp,-dy'
>>>
>>> None of these had the desired effect. In the end, running GHC
>>> with -v and carefully editing the linker line produced the
>>> desired change (I have linked to and provided the diff below).
>>>
>>> The effect -optl seems to be to introduce options in the linker
>>> line just before -lHSrtsmain, which would seem to prevent one
>>> from linking libffi and libgmp differently. Is editing and
>>> storing away the linker script the best option at present for
>>> partially static linking?
>>>
>>> --
>>> Jason Dusek
>>> ()  ascii ribbon campaign - against html e-mail
>>> /\  www.asciiribbon.org   - against proprietary attachments
>>>
>>>
>>>
>>>
>>> https://github.com/solidsnack/arx/commit/90ec5efdb0e991344aa9a4ad29456d466e022c3e
>>> #@@ -122,10 +122,8 @@
>>> #   -lHSarray-0.3.0.2 \
>>> #   -lHSbase-4.3.1.0 \
>>> #   -lHSinteger-gmp-0.2.0.3 \
>>> #-  -lgmp \
>>> #   -lHSghc-prim-0.2.0.0 \
>>> #   -lHSrts \
>>> #-  -lffi \
>>> #   -lm \
>>> #   -lrt \
>>> #   -ldl \
>>> #@@ -136,4 +134,7 @@
>>> #   -lgcc_s --no-as-needed \
>>> #   /usr/lib/gcc/x86_64-linux-gnu/4.6.1/crtend.o \
>>> #   /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../x86_64-linux-gnu/crtn.o \
>>> #+  -static \
>>> #+  -lgmp \
>>> #+  -lffi \
>>>
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe@haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to