libgcc for iPhone Patch v1.1 iPhone5対応

CydiaSystem
iPhoneでgcc環境を整えるためのパッケージ libgcc for iPhone Patchをバージョンアップ
iPhone5に対応させました

[過去記事:iPhone C言語コンパイラ]
[過去記事:libgcc for iPhone Patch]

過去記事のインストール方法を行ってもiPhone5のみコンパイル時に

Illegal instruction: 4

というエラーコードが発生しコンパイルできませんでした
また、iPhone4S以前のデバイスでコンパイルしたバイナリを実行しても同じエラーが発生します
libgcc for iphone patch 1.1 1

これはarmv6で構築されておりiPhone5(CPU A6/A6X)ではサポートされていないのが原因です
armv7またはarmv7sで再コンパイルしなければなりません
過去のバイナリをiPhone5(CPU A6/A6X)でも動作させるには以下のコマンドでコードを書き換える必要があります

$ sed -i” ‘s/\x00\x30\x93\xe4/\x00\x30\x93\xe5/g;s/\x00\x30\xd3\xe4/\x00\x30\xd3\xe5/g;’ バイナリ名

これで過去に作成したバイナリはiPhone5で使用可能になります。また、iPhone5以前のデバイスでも動作するのでCPUごとにバイナリを変える必要もありません

それでは本題のgcc環境を整える方法を書きたいと思います

■Install

NEXTi4HACK.comRepository 追加

http://cydia.nexti4hack.com/

Cydiaから以下のパッケージを記載順にインストールしていきます
*画像は過去記事からのものです

  • libgcc for iPhone *NEXTi4HACKリポジトリ
  • GNU C Compiler
  • iPhone 2.0 Toolchain
  • iPhone OS C/C++ Compiler

libgcc for iPhone

GNU C Compiler

iPhone 2.0 Toolchain

iPhone OS C/C++ Compiler


そしてこの作業はiPhone5(CPU A6/A6X)のみ行ってください

saurik氏のリポジトリにあるiPhone-gcc(GNU C Compiler)iPhone5未対応です
以下のページからパッチ済みのGNU C Compilerをダウンロード&インストールします

DOWNLOAD:apiexplorer

debファイルをi-FunBox等でiPhoneへ転送しiFileもしくはMobileTerminalでインストールします


その後(こちらは全デバイス共通)
私のリポジトリからlibgcc for iPhone Patchをインストールしてください
libgcc for iPhone Patch
libgcc for iphone patch 1.1 2

libgcc for iPhone PatchにはシンボリックリンクだけでなくiOS6 SDKの一部のオブジェクトファイルが含まれています
これにより上記方法でgcc環境を整えればいちいちパッチコマンドを当てることなく
ファイルのコンパイル&実行が可能になります
libgcc for iphone patch 1.1 3

「iPhoneにgcc環境入れて何すんの?」と最初は思いましたが入れておいても損はないので(容量少し食うかな?)プログラミングが好きな方やiPhoneを徹底的にいじりたい方は試してみてはいかがでしょうか?

11 thoughts on “libgcc for iPhone Patch v1.1 iPhone5対応

  1. Libgcc for iPhone patch cannot install. I got error message: tring to overwrite usr/include/pcap-dpf.h ……….. how can I seve this problem? Thank you

    • Please uninstall once.(libgcc for iPhone)
      If there /usr/include/pcap-bpf.h is Delete.
      After ,Install libgcc for iPhone …etc…libgcc Patch

  2. iPhone5s ios7だとvimがカラーにならないのですが 対処方法わかりますか?

  3. libgcc for iPhone Patch内のsqlite3.hを除いていただけませんか?
    libgcc for iPhone PatchをインストールするときにCydiaのパッケージのSQLite 3.x 内のsqlite3.hと干渉してlibgcc for iPhone Patchをインストールできません。
    ちなみにSQLite 3.xをアンインストールするとSQLite 3.xに依存しているいくつかの重要なパッケージも同時にアンインストールされてしまいます。

    • libgcc for iPhone Patch内にsqlite3.hファイルは含まれていませんよ。
      インストールされるパッケージ、多分GNUやTouchの方に含まれているのではないでしょうか?
      リリース者がSaurik氏のため自分ではどうすることもできませんね

  4. 5s ios9.0.2でコンパイルするとエラーになるのですが 9.0.2ではできないのでしょうか?

    • >しじみさん
      コンパイルしようとしているものは記事内で紹介しているslでしょうか?
      コンパイルするソースと出ているエラーが不明なため一意にできないとは断言できません。
      記事内にも記載されている通りiOS6のライブラリを一部使用しているためiOS9では使用できない可能性もあります。
      iOS7までは動作確認済みですが8,9とライブラリの仕様が64bit仕様へ大きく以降しているのでSaurik氏のパッケージが原因の可能性もあります。

      • 返信ありがとうございます
        C言語でHelloと表示させようとすると
        bash-4.0# gcc a.c
        collect2: ld terminated with signal 5 [Trace/BPT trap: 5]
        dyld: Library not loaded: /usr/lib/libuuid.16.dylib
        Referenced from: /usr/bin/ld
        Reason: no suitable image found. Did find:
        /usr/lib/libuuid.16.dylib: mmap() error 22 at address=0x002E1000, size=0x00001000 segment=__DATA in Segment::map() mapping /usr/lib/libuuid.16.dylib
        /usr/lib/libuuid.16.dylib: mmap() error 22 at address=0x002F1000, size=0x00001000 segment=__DATA in Segment::map() mapping /usr/lib/libuuid.16.dylib
        となってしまいます
        ios8.4のときは出来てたのですが どうなんでしょう?

        • error 22とアドレスが返ってきているのでメモリや型のエラーだと思われます。
          こういった類のエラーの原因のほとんどが32bitから64bitへ移行した際のライブラリ非対応です。

          dyld: Library not loaded: /usr/lib/libuuid.16.dylib

          単純にこの一文からlibuuid.16.dylibが原因なのではと推測してみましたが私が配布しているパッケージには同封していなかったので管轄外になってしまうかもしれません。

  5. 6s plus iOS9.3.3 の環境で,gccによるコンパイルは無理でした.
    しかし,iPhone 上に
    http://iphonedevwiki.net/index.php/Compiling_iOS_applications_on-device
    の手順でLLVM Clangの環境を導入すると,c言語のソースファイルをコンパイル出来ました. アプリも自作できます.

コメントを残す

メールアドレスが公開されることはありません。