Hi Alastair, I've gotten a bit further, I think. After replacing "-shared" with "-bundle", and setting "LD" to "cc" (which are the RIGHT values, and actually mentioned in the distributed ffi documentation -- blush!), the process fails at load time: Reading file "X.hs": ERROR "X.hs":3853 - Unknown primitive reference "prim_X_fontRightToLeft" However, running nm X.so | grep fontRightToLeft gives 0001408c t _prim_X_fontRightToLeft That is, we seem to have run into the leading underscore problem you mentioned. I don't have GreenCard installed, so I can't regenerate X.c the proper way. Is there a better way of making a MacOS X compatible distribution than requiring the user to run GreenCard? -- Johan On Monday, June 10, 2002, at 06:58 , Alastair Reid wrote:
I made a quick attempt at installing the graphics library with MacOS X in preparation for the Dec-2001 Hugs release, but I wasn't able to get past some DLL related problems. This is were I stopped:
ERROR "lib/x11/Xlib_StdDIS.hs" - Error while importing DLL "/Users/nordland/src/graphics-2.0.4/lib/x11/Xlib_StdDIS.so": Not an recognisable object file
BTW, getting this far requires replacing "-shared" with "-dynamic", and "ld" with "libtools" in the Makefile, as well as adding "-lSystem" to the definition of LDFLAGS.
One of two things is (I think) going on:
1) The generated .so file is invalid.
My memory of libtools is that it acts in quite a different way from ld -r and friends. It could be that the result isn't quite compatible with dlopen and friends. Or it could be that the way you invoke libtools should be very different from ld.
2) The .so filename is invalid.
This is entirely possible. IIRC, the object files generated by GreenCard are technically object files not shared object files so their name should end in .o not .so. (The reason for this confusion is that the fact that you use the -shared flag when building these files fooled me into thinking I was building a shared object file. Someone later told me I was wrong.)
Or, maybe Mac OS X uses a different file suffix for object files (e.g., .dll) or doesn't use a file suffix at all? If so, it's possible that libtool might do the right thing if invoked right but that the current Makefile overrides this correct behaviour?
-- Alastair Reid reid@cs.utah.edu http://www.cs.utah.edu/~reid/