[Unison-hackers] Compiling under Mac OS X
Jerome Vouillon
Jerome.Vouillon at pps.jussieu.fr
Tue Jul 21 07:39:49 EDT 2009
First thing, I think you can remove the dependency on unison-blob.o
from target macexecutable in Makefile.OCaml. At the moment, the Caml
files are compiled twice! Replace the line:
macexecutable: $(NAME)-blob.o
by just
macexecutable:
Then, the patch had zero chance of working: the problem seems to
happen at an earlier stage, when the Caml code is linked, not when the
GUI is built. Can you try this, then:
> make clean
> export ZERO_LINK=NO
> make
If this still does not work, we have to investigate a bit more. The
compilation process fails at the final step when linking everything
together. The reason is that the two symbols below are not found:
> Undefined symbols:
> "_caml_apply2", referenced from:
> _caml_callback2_exn in libasmrun.a(i386.o)
> "_caml_apply3", referenced from:
> _caml_callback3_exn in libasmrun.a(i386.o)
These symbols should come from file unison-blob.o . You can check
they are indeed defined there with the following command:
> nm unison-blob.o | grep caml_apply2
0000000000005000 T caml_apply2
0000000000003ef0 T caml_apply21
0000000000003b70 T caml_apply23
00000000000037c0 T caml_apply24
If the symbols are not defined, we need to find out at which point
they disappear. You need to change this rule:
$(NAME)-blob.o: $(CAMLOBJS) $(COBJS)
@echo Linking $@
$(CAMLC) -output-obj -verbose $(CAMLFLAGS) ...
$(LD) -r -o $@ u-b.o $(COBJS)
$(RM) u-b.o
into:
$(NAME)-blob.o: $(CAMLOBJS) $(COBJS)
@echo Linking $@
$(CAMLC) -dstartup -output-obj -verbose $(CAMLFLAGS) ...
$(LD) -r -o $@ u-b.o $(COBJS)
(Add a "-dstartup" option to ocamlopt and remove the "rm" command.)
Then, if you recompile, you should get two files u-b.o.startup.s and
u-b.o in the build directory. Then, again, you can use "nm u-b.o" to
find out whether caml_apply2 is defined in u-b.o. In the assembly
file, there should be some lines that look like this:
[...]
.text
.align 16
.globl caml_apply2
caml_apply2:
subq $8, %rsp
[...]
Tell me the last point where you could find caml_apply2 defined (the
corresponding output could be useful too).
Now, if the symbols are actually defined in unison-blob.o, this may be
a problem with the order in which the files are given to gcc for
linking. So, in the following command (that should be a single line),
you can try to move unison-blob.o before -lasmrun. (Under Linux, I
have to put it before all the -lxxx, but this may different under
Mac OS X.)
> /Developer/usr/bin/gcc-4.0 -arch i386 -isysroot /Developer/SDKs/
> MacOSX10.5.sdk -L/Users/bcpierce/current/unison/trunk/src/uimacnew/
> build/Default -F/Users/bcpierce/current/unison/trunk/src/uimacnew/
> build/Default -F/Users/bcpierce/current/unison/trunk/src/uimacnew -
> filelist /Users/bcpierce/current/unison/trunk/src/uimacnew/build/
> uimacnew.build/Default/uimac.build/Objects-normal/i386/
> Unison.LinkFileList -mmacosx-version-min=10.5 -L/usr/local/lib/ocaml -
> lunix -lthreadsnat -lstr -lbigarray -lasmrun -framework Cocoa -
> framework Security -framework Growl -framework ExceptionHandling /
> Users/bcpierce/current/unison/trunk/src/uimacnew/../unison-blob.o -o /
> Users/bcpierce/current/unison/trunk/src/uimacnew/build/Default/
> Unison.app/Contents/MacOS/Unison
-- Jerome
More information about the Unison-hackers
mailing list