iPhone 2.0 ToolchainでLha for Unixをセルフコンパイル - iPhone.goodegg.jp

ホーム > 未分類 > 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だけでどうにかできる!(実用性は乏しいので非常用?) 欲しいツールを自分でコンパイルできるのは嬉しいなぁ。   クロスコンパイル環境も作ってみたいですが…今日はここまで。  
  • http://www.appbank.net/2009/01/27/iphone-application/7522.php 1月がもう終わるということは… iPhoneニュースと世相ナナメ読み 2009年1月27日 ver 1.0 : AppBank ~ iPhone, iPod Touch

    [...] 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 かっちょいいなぁ [...]

  • k

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

  • goodegg

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

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

サイト内検索
更新情報
Ads
アクセス元ランキング
相互リンク
ブログパーツ
あわせて読みたいブログパーツ

 フィードメーター - iPhone.goodegg.jp

Return to page top