2013-01-13 9 views
9

背景問題アームのlinux-androideabi-gccのを使用してオブジェクトをコンパイルする

  • OSXはOS
  • R8 NDK

である私は、Android GCCコンパイラを使用して、以下のクラスをコンパイルしようとしています。.. 。

#include <stdint.h> 
int main (void){ 
    return 0; 
} 

私は...、次のコマンドで行う

私はそうよるgccの知識の欠如(ただし、一部のGoogleの能力)に私はこれを見つけ、それを試してみてください...

In file included from hello.c:1:0: 
/Users/un/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/include/stdint.h:3:26: fatal error: stdint.h: No such file or directory 
compilation terminated. 

を取得

[email protected]:~/Development/Code/OpenGL$ ~/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/arm-linux-androideabi-gcc hello.c -o hello 

...

[email protected]:~/Development/Code/OpenGL$ ~/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/arm-linux-androideabi-gcc hello.c -o hello -ffreestanding 

とI取得...

/Users/un/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_dynamic.o: No such file or directory 
/Users/un/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtend_android.o: No such file or directory 
/Users/un/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lc 
/Users/un/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -ldl 
collect2: ld returned 1 exit status 

私が間違っていることを助けてくれる人がいますか?私はリンクや何かを紛失していますか? Android.mkはオプションではありません。これはどちらか動作していない

UPDATE ...

arm-linux-androideabi-gcc hello.c --sysroot=~/Development/Android/android-ndk-r8c/platforms/android-9/arch-arm 
/Users/jackiegleason/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_dynamic.o: No such file or directory 
/Users/jackiegleason/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtend_android.o: No such file or directory 
/Users/jackiegleason/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -lc 
/Users/jackiegleason/Development/Android/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: error: cannot find -ldl 
collect2: ld returned 1 exit status 

答えて

6

Android.mkファイルを使用したくないので、私は先に進んでスタンドアロンのツールチェーンを作成しました。これは以下を使用して行われます...

/Users/un/Downloads/android-ndk-r8d/build/tools/make-standalone-toolchain.sh --platform=android-9 --install-dir=/tmp/my-toolchain 
/tmp/my-toolchain/bin/arm-linux-androideabi-gcc hello.c 

「代替」が私ができるgccのリンクに関して何かを知りたいと思います。

+1

また、application.mkファイルをもう一度チェックし、プラットフォームのバージョンが8より高いことを確認してください。 – Jackie

+1

私はUbuntu OSでいくつかの引数が必要でした:/ home/user/android-ndk-r10d/build/tools $ ./ make-standalone-toolchain.sh --platform = android-21 --install-dir =/tmp/my-toolchain --toolchain = arm-linux-androideabi-4.9 --system = linux-x86_64 そしてMac OS Xの場合: /Users/user/android-ndk-r10d/build/tools $ ./make-standalone-toolchain.sh --platform = android-21 --install-dir =/tmp/my-toolchain --ndk-dir =/Users/user/android-ndk-r10d/--toolchain = arm-linux-androideabi-4.9 --system = darwin-x86_64 – Neonigma

8

あなたはどこAndroidのシステムファイルとヘッダを見つけるためにGCCを伝える必要があります。いずれかの使用:

  1. ndk-buildBUILD_EXECUTABLE
  2. 又は、--sysroot GCCオプション付きAndroid.mk

[1]

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_MODULE := foo 
LOCAL_SRC_FILES := foo.c 

include $(BUILD_EXECUTABLE) 

[2]

# Change `android-9` with the level you target 
/path/to/android-ndk-r8c/toolchains/arm-linux-androideabi-4.6/prebuilt\ 
/darwin-x86/bin/arm-linux-androideabi-gcc\ 
--sysroot /path/to/android-ndk-r8c/platforms/android-9/arch-arm/\ 
    foo.c -o foo 

# Or generate a ready-to-use standalone toolchain (better) 
/path/to/android-ndk-r8c/build/tools/make-standalone-toolchain.sh \ 
--platform=android-9 \ 
--install-dir=/tmp/my-android-toolchain 

export SYSROOT=/tmp/my-android-toolchain/sysroot 

/path/to/arm-linux-androideabi-gcc --sysroot $SYSROOT foo.c -o foo 
+0

Sysrootは動作しませんでした。Android.mkはオプションではありません。私はスタンドアロンのツールチェーンを作ったのですが、reqライブラリをリンクする方法はありません。 – Jackie

+1

sysroot **は**動作します(間違いまたは誤植であったはずです)。上記の解決方法は、同じことを変えるものです。システムリソースを見つける場所をコンパイラに伝えます。それ以上はない。また、詳細なステップ/フラグを正式に使用する必要がある場合は、 'ndk-build V = 1'を使用して出力を確認してください。 – deltheil

+0

ここでは動作しませんでした。私のコードは... arm-linux-androideabi-gcc hello.c --sysroot =〜/ Development/Android/android-ndk-r8c/platforms/android-9/arch-arm – Jackie

5

この回答は、@ deltheilの答えにもう少し詳しく説明しています。私はAndroidでI2CバスをデバッグするためにI2C-toolsをコンパイルしようとしていたのと同様の問題がありました。何とかして、ファイルを作り、 - sysroot & --dynamic-linkerオプションなどのさまざまなオプションを試して1日以上苦労した後、私は最終的にAndroidのAOSPツリー内でコンパイルしようとしました。 Google Nexus-S AOSPを使用して、Samsung S3携帯電話で実行するバイナリを作成しました。私は、AOSP /外部フォルダ内のソース用のi2c-toolsというフォルダを作成し、Android.mk、Cleanspecをコピーしました。MK別の実行ファイルのフォルダ(ピング)から& MODULE_LICENCEと、次のようにI2C-ツールのためにそれを修正:

ifneq ($(TARGET_SIMULATOR), true) 

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 

LOCAL_SRC_FILES := i2cdetect.c i2cbusses.c 

LOCAL_C_INCLUDES := $(KERNEL_HEADERS) 
LOCAL_MODULE := i2cdetect 
LOCAL_MODULE_TAGS := tests 
LOCAL_SHARED_LIBRARIES := libc 

include $(BUILD_EXECUTABLE) 

endif 

は、その後、私はちょうど走った:

source build/envsetup.sh 
make i2cdetect 

をAOSPベースフォルダと出来上がりから、私が持っていましたout/target/product/generic/system/bin /フォルダー内で実行可能な作業です。オリジナルの(i2c-tools)/ツール&から必要なすべてのソースファイルとヘッダーファイルをコピーしなければならなかったことに注意してください。#includeの一部を変更して、同じ場所にあるヘッダファイルcソース。

+0

モジュール名の後にスペースが残らないように注意してください。上記の例では、このような問題はありません。 – KrisWebDev

0

私の場合、.oファイルが必要で、をメイン()と定義する必要はありませんでした。 私は-cスイッチを指定する必要がありました:〜/斧〜/がリンクされている

~/ax/arm-linux-androideabi-g++ --sysroot=~/an/platforms/android-8/arch-arm/ -c dummy.c 

ax -> ~/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/ 
an -> ~/android-ndk-r9d/ 

が dummy.o をしました。

0

私はので、私が試した 、Ubuntuの中 デフォルトの圧縮ファイルマネージャは、シンボリックリンクを抽出していなかった、問題を解決:ndk.tar.bz2をuntarするためにfilename.tar.bz2 jxfタールを、今では正常に動作します

関連する問題