ホーム > 未分類 > iPhone 2.0 ToolchainでLha for Unixをセルフコンパイル

iPhone 2.0 ToolchainでLha for Unixをセルフコンパイル

Cydiaにunzipはあるけど、lhaはないよなぁと常々不満に思っていたのですが…ひとりぶろぐのmoyashiさんが「歩きながらnkfをセルフコンパイルした。」とおっしゃっていたのを伺い、「そうか自分でやればよいのか」とやってみた。試行錯誤の手順メモです。
 

前置き

  • この記事を書いている人間の理解が足りません。手順に誤りがある可能性があります。
  • とりあえず簡単そうなiPhone上でのセルフコンパイルにしました。でも、フラッシュドライブ上でのコンパイルはちょっと気持ち悪い感じがします。余裕がでてきたらクロスコンパイル環境を作ることにします。

手順メモ

試行錯誤をそのまま載っけておきます。明記しない限りiPhone上(母艦からSSH)での作業です。
 

iPhone ToolChain2.0の導入

CydiaからiPhone ToolChain2.0をインストールします。実際はそれだけじゃ足りないのですが…とりあえず先に進みます。
 

LHa for UNIXを入手。

LHa for UNIX – SourceForge.JPを使わせて頂くことにします。

wget http://osdn.dl.sourceforge.jp/lha/22231/lha-1.14i-ac20050924p1.tar.gz
tar xvfz lha-1.14i-ac20050924p1.tar.gz

 

なにはともあれconfigure(1回目)

とりあえずconfigureしてエラーを見ながら対応を考えていくことに。

cd lha-1.14i-ac20050924p1
./configure

checking whether the C compiler works… configure: error: cannot run C compiled programs.で止まった。config.logを見ると…

configure:2278: checking whether the C compiler works
configure:2284: ./a.out
./configure: line 2285: 1877 Killed ./$ac_file

a.outを実行できなくて止まっているみたいです。
 

iPhoneのコード署名チェックを無効化

Bypassing iPhone Code Signatures – saurik.com
iPhoneのコード署名チェックを無効化するか擬似署名しないと、独自のコードは動かないとのこと。

sysctl -w security.mac.proc_enforce=0
sysctl -w security.mac.vnode_enforce=0

※iPhone再起動すると元に戻っちゃいます。
 

configure(2回目)

./configure

configure: error: C preprocessor “/lib/cpp” fails sanity checkって怒られた。config.logを見てみるとstdio.hなど基本的なヘッダーすらなくて怒ってらっしゃる。
 

iPhone SDKの入手

Toolchain 2.0 – theiphonewiki.comを見ると、iPhone SDKからヘッダーファイルを持ってこいと言うのでそうする。
 
ここは母艦で作業しました。

  1. iPhone DevCenter(要登録-無料)からiPhone SDK for iPhone OS 2.2 (updated 11/20/2008)をダウンロード。iphone_sdk_for_iphone_os_2.2_9m2621_final.dmg 1.55GB
  2. HFSExplorerをダウンロードしてインストール。
  3. ダウンロードした.dmgをHFSExplorerで開いて、iPhoneSDKHeadersAndLibs.pkgを抽出する。
  4. iPhoneSDKHeadersAndLibs.pkgをSCPでiPhone上にコピー

 

ヘッダーファイルの設置

Toolchain 2.0 – theiphonewiki.comの手順を参考にヘッダーファイルを設置する。


xar -xf iPhoneSDKHeadersAndLibs.pkg Payload
zcat Payload | cpio -id '*.h'

rm -rf Platforms/iPhoneOS.platform/Developer/Library

mkdir include

mv Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/* .
rmdir -p Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.sdk/

mv System/Library/Frameworks/* .
rmdir -p System/Library/Frameworks/

mv AddressBook.framework/Headers include/AddressBook
mv AddressBookUI.framework/Headers include/AddressBookUI
mv AudioToolbox.framework/Headers include/AudioToolbox
mv AudioUnit.framework/Headers include/AudioUnit
mv CFNetwork.framework/Headers include/CFNetwork
mv CoreAudio.framework/Headers include/CoreAudio
mv CoreFoundation.framework/Headers include/CoreFoundation
mv CoreGraphics.framework/Headers include/CoreGraphics
mv CoreLocation.framework/Headers include/CoreLocation
mv Foundation.framework/Headers include/Foundation
mv MediaPlayer.framework/Headers include/MediaPlayer
mv OpenAL.framework/Headers include/OpenAL
mv OpenGLES.framework/Headers include/OpenGLES
mv QuartzCore.framework/Headers include/QuartzCore
mv Security.framework/Headers include/Security
mv SystemConfiguration.framework/Headers include/SystemConfiguration
mv AVFoundation.framework/Headers include/AVFoundation
mv UIKit.framework/Headers include/UIKit

rmdir -p *.framework

mv usr/include/* include/
rm -rf usr/lib
rmdir -p usr/include/

rm Payload

cp -r include/* /usr/include/
rm -rf include/

 

configure(3回目)

./configure

またエラー。config.logを見ると/usr/include/libkern/arm/OSByteOrder.h:8:20: error: stdint.h: No such file or directoryとのこと。あれ、stdint.hがない?
 
探してみる。

#find /usr/include/ -name stdint.h
/usr/include/gcc/darwin/4.0/stdint.h

 
とりあえずリンクを張ってみる。

ln -s /usr/include/gcc/darwin/4.0/stdint.h /usr/include/stdint.h

 

configure(4回目)

./configure

こんどこそ成功。
 

make

makeしてみると…

Makefile:317: warning: overriding commands for target `lha-test’
Makefile:190: warning: ignoring old commands for target `lha-test’

とwarningはでるけど成功。PATHの通った所にコピーし、擬似署名をしておく。

cp src/lha /usr/bin/lha
ldid -S /usr/bin/lha

 

実験

母艦上で作ったLZHファイルで実験。

lha -x sample.lzh

きちんと解凍できました!
日本語ファイル名は化けるけど…文字コード展開周りのコンパイルオプションないかそのうち探す。
 

雑感

これで添付ファイルがLZHのメールが来ても、iPhoneだけでどうにかできる!(実用性は乏しいので非常用?)
欲しいツールを自分でコンパイルできるのは嬉しいなぁ。
 
クロスコンパイル環境も作ってみたいですが…今日はここまで。
 

Comments:2

k 09-01-28 (水) 21:12

自作すばらしいですね。メカなら自作しますが;;;
私は見ても、まったくもって意味不明で判りませんがTT
自分でコンパイルできたら楽しいでしょうねー
応援してます楽しく毎日みてます^^。

goodegg 09-01-29 (木) 0:30

>k san
私もなんのこちゃだか半分わからずに書いているので…
豊富なUnix系ツールが利用できるのはiPhoneの魅力ですね!

Comment Form
名前とメールアドレスを記憶する

Trackbacks:1

トラックバックURL
http://iphone.goodegg.jp/archives/3055/trackback
Listed below are links to weblogs that reference
iPhone 2.0 ToolchainでLha for Unixをセルフコンパイル from iPhone.goodegg.jp
pingback from 1月がもう終わるということは… iPhoneニュースと世相ナナメ読み 2009年1月27日 ver 1.0 : AppBank ~ iPhone, iPod Touch 09-01-27 (火) 6:25

[...] rewards the lazy 1月20日でおそらく累計106831DL i Wrote a top 10 app….and its shit iPhone 2.0 ToolchainでLha for Unixをセルフコンパイル – iPhone.goodegg.jp かっちょいいなぁ [...]

ホーム > 未分類 > iPhone 2.0 ToolchainでLha for Unixをセルフコンパイル

サイト内検索
更新情報
オススメなモノ
iPhone 4 Style Book アプリの選定や執筆に参加させて頂きました。iPhone初心者〜中級者に向けた濃密な内容に仕上がっております。
iPad Style Book 執筆に参加させて頂きました。iWorkも30頁くらいとって丁寧に解説してあります。
Case-Apple Wireless Keyboard (JIS) iPhoneで使えるBluetoothキーボードのうち、唯一JIS配列で打鍵できるキーボード。こいつがあればiPhoneで長文作成も楽々。
Case-Mate iPhone4 専用 iPhoneとSuicaなどのICカードを一緒に持ち歩けるケース。上手く読み取れないときはPIT-Mobile 干渉エラー防止シールがオススメ。
AppleコンポジットAVケーブル MB129LL/B 写真と動画再生をTVに出力。実はかなりオススメ。レビュー記事はこちら
MiniRizer pocked-sized Gadget Stand 1,800円前後と安くはないけど持ち運びできる使い勝手の良いiPhoneスタンド。レビュー記事はこちら。
SANWA SUPPLY PDA-STN2W 1,000円前後で買える安いスタンド。レビュー記事はこちら
ブログパーツ
あわせて読みたいブログパーツ

 フィードメーター - iPhone.goodegg.jp
キーワード
相互リンク

Return to page top