絖綛 N@i.jp  昨日:00045750
 今日:00023067
 総計:00919546
keywords
管理者専用
  Post   Add link   Control Panel 































新しいトピック
最新:06/13 19:58


新しいコメント
最新:07/28 16:47






管理人へMAIL

プライバシーポリシー

UNIX, X-Windowアプリが

PowerPCバイナリのままでも、取り合えず動いていたのだが


 PowerMac G4/MDD で作ってあった UNIX, X-Window関係のアプリ類(PowerPCバイナリ)だが、Mac Pro にそのまま持って行っても何とか動いていた。これは Rozettaエミュレータによる互換性が高いと言う事ではあるが、1つのアプリ(プロセス)内で PowerPC、Intelバイナリを混在させることはできない。その1つの例がスクリーンセーバーで、アプリ自体は Intelバイナリなので PowerPCバイナリのスクリーンセーバーモジュールを読み込んで動作させる事はできない。
 これは UNIX, X-Windowアプリについて言うと、アプリ自体と実行時に読み込まれるダイナミックリンクライブラリで PowerPC、Intel バイナリ混在状態にはできないと言うことになる。PowerPCバイナリの UNIX, X-WIndowアプリは、どんな末端のライブラリであっても全て PowerPCバイナリでなければならない。では、MacOS Xシステム標準のライブラリはどうなっているのだろう。PowerPCバイナリのアプリだってシステムライブラリを使うし、当然 Intelバイナリのアプリも。
 調べてみたら、


$ file /usr/lib/libc.dylib
/usr/lib/libc.dylib: Mach-O universal binary with 4 architectures
/usr/lib/libc.dylib (for architecture ppc7400):	Mach-O dynamically linked shared library ppc
/usr/lib/libc.dylib (for architecture ppc64):	Mach-O 64-bit dynamically linked shared library ppc64
/usr/lib/libc.dylib (for architecture i386):	Mach-O dynamically linked shared library i386
/usr/lib/libc.dylib (for architecture x86_64):	Mach-O 64-bit dynamically linked shared library x86_64

こうなっていた。Universalバイナリというファイル型式はアプリ(実行可能ファイル)だけのものではなくダイナミックリンクライブラリでも可能で、システムライブラリは PowerPC 32bit/64bit, Intel 32bit/64bit の実に4種類のバイナリをまとめた物になっていた。

 これで動いているのだから、そのままにしておけば良いだろうとも思うが、そうも言ってられない。少し動作がおかしい所もあるし、バグ修正、特にセキュリティ修正が出たらそれを適用しておきたい。ところが、今Mac Pro上で普通にビルドすると、出来上がるのは Intel 32bitバイナリになる(↓)。


$ file /usr/local/lib/libtiff.3.dylib
/usr/local/lib/libtiff.3.dylib: Mach-O dynamically linked shared library i386

 1つのダイナミックリンクライブラリを PowerPCバイナリから Intelバイナリに置き換えたら、関連するライブラリや、それを使っているアプリ全部を Intelバイナリ化しなければならない。でなければバイナリ混在状態になってしまい、動作しなくなってしまうのだ。
 と言うわけで、ここのところ少しずつ UNIX, X-Window関連のアプリ、ライブラリの Intelバイナリ化を進めていたのだが・・・作り直したところ mltermが動かなくなってしまった。と言うか、最初はビルドすら通らなかった。原因は MacOS-X が Leopard になった事、X-Window が XFree86 から X.org になった事などだと思う。昨夜も色々ジタバタして、何とか mlterm のビルドを通し、実行時エラーの原因もいくつか特定、修正したのだが、まだ X-Windowのエラーが出て異常終了してしまう。先は長そうだ。

 取り合えず mlterm-2.9.2 で修正した所をメモしておこう。


mlterm-2.9.2/kiklib/src/Makefile
	CFLAGS = $(CFLAGS_LOCAL)  -g -O2 -D_DARWIN_C_SOURCE
	DEPOBJ = kik_pty_streams.o kik_utmp_bsd.o kik_dlfcn_dyld.o

mlterm-2.9.2/tool/mlconfig/mc_io.c (71行目)
	if( read( fileno(stdin) , &c , 1) == 1)

mlterm-2.9.2/inputmethod/uim/Makefile
	CFLAGS = $(CFLAGS_LOCAL)        ¥
	     -D_DARWIN_C_SOURCE         ¥
	     -DUSE_KBD -DUSE_UIM -DUSE_IM_PLUGIN -DUIM_0_4_4_OR_LATER ¥

赤字の部分が追加したり修正したところ。




< 過去の記事 [ 2月の 全てのカテゴリ リスト ] 新しい記事 >

2008 calendar
2月
12
3456789
10111213141516
17181920212223
242526272829


掲示板
最新:08/15 17:19


GsBlog was developed by GUSTAV, Copyright(C) 2003, Web Application Factory All Rights Reserved.