-1

ASL ライブラリを使用して iPhone 上のアプリのログを取得する C プログラムがあります。今、私はこれを Mac でコンパイルしましたが、Mac でアプリのログを取得して正常に動作します。そこで、GNU C Compiler を iPhone にインストールしてコンパイルしました。今、コンパイルすると、次のようなエラーが表示されます。

cP-iphone:~ root# gcc test.c
test.c:1:19: error: stdio.h: No such file or directory
test.c:2:17: error: asl.h: No such file or directory
test.c: In function 'main':
test.c:5: warning: incompatible implicit declaration of built-in function 'printf'
test.c:16: error: 'aslmsg' undeclared (first use in this function)
test.c:16: error: (Each undeclared identifier is reported only once
test.c:16: error: for each function it appears in.)
test.c:16: error: expected ';' before 'q'
test.c:21: error: 'q' undeclared (first use in this function)
test.c:21: error: 'ASL_TYPE_QUERY' undeclared (first use in this function)
test.c:22: error: 'ASL_KEY_SENDER' undeclared (first use in this function)
test.c:22: error: 'ASL_QUERY_OP_EQUAL' undeclared (first use in this function)
test.c:23: error: 'aslresponse' undeclared (first use in this function)
test.c:23: error: expected ';' before 'r'
test.c:24: error: 'NULL' undeclared (first use in this function)
test.c:24: error: 'm' undeclared (first use in this function)
test.c:24: error: 'r' undeclared (first use in this function)
test.c:27: warning: assignment makes pointer from integer without a cast
test.c:30: warning: assignment makes pointer from integer without a cast

ac ファイルをコンパイルして iPhone で実行するために必要なことを教えてください。

4

2 に答える 2

2

シミュレーターと Mac では、i386 コードを実行できます。ただし、別のプロセッサであるため、実際のデバイスではできません。

XCode から iOS SDK を対象とする静的ライブラリとしてコードをコンパイルする必要があります。のコマンドラインオプションxcodebuild-target iphoneos -arch armv7

于 2013-03-19T11:07:38.300 に答える
0

コマンドラインでは、これにより iOS 用の署名されていないユニバーサル実行可能ファイルがコンパイルされます。

(したがって、ジェイルブレイクされた、または署名済みアプリから何らかの方法で起動された実際のデバイスでのみ実行されます (おそらく、IAS で許可されていない呼び出しを使用します)。)

clang -isysroot "$(xcode-select -p)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk" \
  -arch armv7 \
  -arch armv7s \
  -arch arm64 \
  -mios-version-min=5.0 \
  foo.c -o foo

与えられたfoo.c

#include <stdio.h>
int main(void){printf("Hello, world!\n");return(0);}

次に、JB'ed デバイスに scp します ( scp foo mobile@name_of_iphone.local:.):

MBF:~ mobile$ ./foo
Hello, world!
MBF:~ mobile$ rm foo
MBF:~ mobile$ ^D # logout

しかし、おそらくこれを簡単なラッパー スクリプトに変換するか、代わりに xcodebuild インフラストラクチャを使用することをお勧めします。

~/bin/clang_ios

#!/bin/sh
set -e
exec clang -isysroot "$(xcode-select -p)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk" \
  -arch armv7 \
  -arch armv7s \
  -arch arm64 \
  -mios-version-min=5.0 \
  "$@"

クレジット

その他の回答とhttp://clang-developers.42468.n3.nabble.com/targeting-iOS-tp4028940p4028942.html

于 2014-12-04T23:46:00.010 に答える