Hatena::Groupocaml-nagoya

Happy OCaml!!

2009-03-11

ocamloptでユニバーサルバイナリが作りたい

| はてなブックマーク - ocamloptでユニバーサルバイナリが作りたい - Happy OCaml!!

何が問題なの?

ocamloptで実行ファイルを作っても、単一のアーキテクチャでしか動かない><。

$ ocamlopt hello.ml -o hello
$ file hello
hello-i386: Mach-O executable i386

"-ccopt"で-archを複数指定してやればいいと思いきや、それでもうまく動かない><。

$ ocamlopt -ccopt "-arch i386 -arch ppc" hello.ml
ld warning: in /var/folders/ER/ERpTAvKHGAeST-apMbQus++++TI/-Tmp-/camlstartup73a88f.o, file is not of required architecture
ld warning: in /opt/manual/ocaml-spot/lib/ocaml/std_exit.o, file is not of required architecture
ld warning: in hello.o, file is not of required architecture
ld warning: in /opt/manual/ocaml-spot/lib/ocaml/stdlib.a, file is not of required architecture
ld warning: in /opt/manual/ocaml-spot/lib/ocaml/libasmrun.a, file is not of required architecture
Undefined symbols for architecture ppc:
  "_main", referenced from:
      start in crt1.10.5.o
ld: symbol(s) not found for architecture ppc
collect2: ld returned 1 exit status
lipo: can't open input file: /var/folders/ER/ERpTAvKHGAeST-apMbQus++++TI/-Tmp-//ccwCVSY5.out (No such file or directory)
File "caml_startup", line 1, characters 0-1:
Error: Error during linking

で、どうすればいいの?

  1. Re: [Caml-list] Re: Building a universal binary on OS X?を参考にして、PPC用ocamloptとi386用ocamloptを作ってやる
  2. PPC用とi386用のバイナリコンパイルする
  3. lipoで結合する

手順

PPC用のOCamlビルドする。

$ ./configure -cc "gcc -mmacosx-version-min=10.4 -arch ppc -isysroot /Developer/SDKs/MacOSX10.4u.sdk" -prefix /opt/ppc -host powerpc-apple-darwin8.11.0
$ make world
$ make opt
$ sudo make install

いったんcleanする。

$ make clean

i386用のOCamlインストールする。

$ ./configure -cc "gcc -mmacosx-version-min=10.4 -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk" -prefix /opt/i386
$ make world
$ make opt
$ sudo make install

じゃあ、コンパイルしてみよう。

$ /opt/ppc/bin/ocamlopt -o hello-ppc hello.ml
$ /opt/i386/bin/ocamlopt -o hello-i386 hello.ml
$ lipo -create -output hello -arch ppc hello-ppc -arch i386 hello-i386
$ file hello
hello: Mach-O universal binary with 2 architectures
hello (for architecture ppc):   Mach-O executable ppc
hello (for architecture i386):  Mach-O executable i386

やった! できた!!

ついでだから、ocamlopt-pccみたいなシンボリックリンクを作っておくと便利だよ!

謝辞

@banjunにいろいろ教えてもらいました。ありがとう!

PradeepPradeep 2012/07/08 21:08 Weeeee, what a quick and easy slotouin.

lollugklollugk 2012/07/10 02:21 AJTAt6 , [url=http://otgfehdhfbzi.com/]otgfehdhfbzi[/url], [link=http://njpgyhjylsno.com/]njpgyhjylsno[/link], http://mhptlaemahff.com/

rezmbzyrezmbzy 2012/07/11 02:01 Ew6S95 <a href="http://czvhptympwka.com/">czvhptympwka</a>

ihtejkihtejk 2012/07/11 05:39 1V0aPO , [url=http://chexpyesofal.com/]chexpyesofal[/url], [link=http://rejdptzqbmvw.com/]rejdptzqbmvw[/link], http://holgbxjkkwom.com/

quianbyxppquianbyxpp 2014/03/18 17:16 krcowpdbnm.obhpzb, <a href="http://www.wiiijrioxz.com/">qfcldeaozd</a> , [url=http://www.wqgllhygxa.com/]cjmurdgrdm[/url], http://www.teflvcdhpj.com/ qfcldeaozd

ゲスト



トラックバック - http://ocaml-nagoya.g.hatena.ne.jp/mzp/20090311