Hatena::ブログ(Diary)

The ブログ(仮) このページをアンテナに追加 RSSフィード

2009-11-13

メモ:Snow Leopard上でLeopardで動くバイナリをビルドするには

g++のオプションに以下を入れてビルドすればよい。(もちろんSnow LeopardのCDからXCode Toolsをインストールしたあとで。)

-arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5

もし、以下のようなエラーが出たら、ライブラリのarchitectureが合っていない。

ld: warning: in libXXX.dylib, file is not of required architecture

architecureを確認するには、

file libXXX.dylib

その結果、

libXXX.dylib: Mach-O 64-bit executable x86_64

と出たら、64bitでビルドされているということなので、32bit(-arch i386)か、64bitと32bitのUniversal binary(-arch i386 -arch x86_64を同時に指定)でリビルドする必要がある。

Macportsで入れたライブラリだったら、

sudo port install libXXX +universal

というように+universalを指定すると多くのライブラリでUniversalでビルドしてくれる。

さらにそのライブラリdependencyがある場合は、入っているものを全部uninstallしてからやりなおす必要があるかも。

sudo port -f uninstall installed
sudo port install libXXX +universal
g++ -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk -mmacosx-version-min=10.5 ...

参考:http://cocoawithlove.com/2009/09/building-for-earlier-os-versions-in.html

2007-12-23

Haskellメモ: GHC 6.8.1をLeopardにインストール

GHC 6.8.1をLeopardインストールしてみました。

いくつか罠がありましたので、はまってる人に見つけてもらいやすいように、全試行錯誤の記録を残しておきます。

まず、GHC 6.8.2をダウンロードしてインストールしようとしてみた。

curl -O http://haskell.org/ghc/dist/6.8.2/chakravarty/ghc-6.8.2-i386-apple-darwin.tar.bz2
bzcat ghc-6.8.2-i386-apple-darwin.tar.bz2 | tar xvf -
cd ghc-6.8.2
./configure
make
sudo make install

これでGHCをスタートすると以下のようにエラーになってしまう。

hideaki% ghci
dyld: Library not loaded: /opt/local/lib/libreadline.5.2.dylib
  Referenced from: /usr/local/lib/ghc-6.8.2/ghc-6.8.2
  Reason: image not found
Trace/BPT trap

libreadline(入力ラインライブラリ)が入ってないのが問題。インストールしよう。

curl -O ftp://ftp.gnu.org/gnu/readline/readline-5.2.tar.gz
gzcat readline-5.2.tar.gz | tar xvf -
cd readline-5.2
./configure
make

...でもここでmakeが以下のように失敗してしまう。...

gcc -dynamic -arch_only `/usr/bin/arch` -install_name /usr/local/lib/libreadline.5.2.dylib -current_version 5.2 
-compatibility_version 5 -v -o libreadline.5.2.dylib readline.so vi_mode.so funmap.so keymaps.so parens.so 
search.so rltty.so complete.so bind.so isearch.so display.so signals.so util.so kill.so undo.so macro.so 
input.so callback.so terminal.so text.so nls.so misc.so xmalloc.so history.so histexpand.so histfile.so 
histsearch.so shell.so mbutil.so tilde.so compat.so -lncurses
Using built-in specs.
Target: i686-apple-darwin9
Configured with: /var/tmp/gcc/gcc-5465~16/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man 
--enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 
--with-slibdir=/usr/lib --build=i686-apple-darwin9 --with-arch=apple --with-tune=generic --host=i686-apple-darwin9 
--target=i686-apple-darwin9
Thread model: posix
gcc version 4.0.1 (Apple Inc. build 5465)
i686-apple-darwin9-gcc-4.0.1: -compatibility_version only allowed with -dynamiclib
make[1]: *** [libreadline.5.2.dylib] Error 1
make: [shared] Error 2 (ignored)

これを解決するには、まず、readline-5.2/support/shobj-confを編集する。

以下の行を見つけて、

darwin[78]*)	SHOBJ_LDFLAGS=''

以下のように書き換える。

darwin[789]*)	SHOBJ_LDFLAGS=''

そしてもう一度はじめからlibreadlineのインストール。今度はうまくいく。

./configure CFLAGS="-isystem /usr/local/include"
make
sudo make install

もういちどGHCIの起動をためしてみると、新たな問題が浮上。

hideaki% ghci
dyld: Library not loaded: /opt/local/lib/libgmp.3.dylib
  Referenced from: /usr/local/lib/ghc-6.8.2/ghc-6.8.2
  Reason: image not found
Trace/BPT trap

これに対しては、libgmpをインストールする。

curl -O ftp://ftp.gnu.org/gnu/gmp/gmp-4.2.2.tar.bz2
bzcat gmp-4.2.2.tar.bz2 | tar xvf -
./configure
make
make check
sudo make install

すると、今度はGHCバグらしい。

hideaki% ghci
GHCi, version 6.8.2: http://www.haskell.org/ghc/  :? for help

<interactive>:1:22:
    Failed to load interface for `System.IO':
      Use -v to see a list of the files searched for.

<interactive>:1:22:
    Failed to load interface for `System.IO':
      Use -v to see a list of the files searched for.

<interactive>:1:22:
    Failed to load interface for `System.IO':
      Use -v to see a list of the files searched for.
ghc-6.8.2: panic! (the 'impossible' happened)
  (GHC version 6.8.2 for i386-apple-darwin):
        interactiveUI:setBuffering

Please report this as a GHC bug:  http://www.haskell.org/ghc/reportabug

しかたないので、一つ前のバージョン6.8.1を試すことにする。

curl -O http://haskell.org/ghc/dist/6.8.1/chakravarty/ghc-6.8.1-i386-apple-darwin.tar.bz2

bzcat ghc-6.8.1-i386-apple-darwin.tar.bz2 | tar xvf -
cd ghc-6.8.1
./configure
make
sudo make install

またエラーになる。

nstalling: /usr/local/lib/ghc-6.8.1/lib/readline-1.0.1.0
Registering readline-1.0.1.0...
Reading package info from "dist/installed-pkg-config" ... done.
Saving old package config file... done.
Writing new package config file... done.
if ifBuildable/ifBuildable Cabal; then \
          cd Cabal && \
          ../installPackage/installPackage '/Users/hideaki/sw/ghc-6.8.1/utils/ghc-pkg/ghc-pkg.bin' 
'/usr/local/lib/ghc-6.8.1/package.conf' '' '/usr/local' '/usr/local' '/usr/local/bin' '/usr/local/lib/ghc-6.8.1/lib' 
'/usr/local/lib/ghc-6.8.1/lib' '/usr/local/share/ghc-6.8.1' '/usr/local/share/doc/ghc/libraries/$pkgid' 
'/usr/local/share/doc/ghc/libraries/$pkgid' '/usr/local/share/doc/ghc/libraries/$pkgid' ; \
        fi
installPackage: Multiple files with extension buildinfo
make[1]: *** [install.library.Cabal] Error 1
make: *** [install] Error 2

これは、以下で解決する。._buildinfor.buildinfoというくせ者が潜んでいるので削除。

cd libraries/Cabal
rm ._buildinfo2.buildinfo 

もういちど、sudo make installしてghciを試すと、今度は成功する。

hideaki% ghci
GHCi, version 6.8.1: http://www.haskell.org/ghc/  :? for help
Loading package base ... linking ... done.
Prelude> 

参考にしたサイト Thanks a lot !!

http://homepage.mac.com/matsuan_tamachan/software/ReadLine.html

http://www.violentlyhappy.org/kazuya/yanetut/2007/12/installing-ghc-681-on-mac-os-x-leopard.html