10

バックグラウンド

  • OSXはOSです
  • R8 NDK

AndroidGCCコンパイラを使用して次のクラスをコンパイルしようとしています...

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

私は次のコマンドで行います...

un@un:~/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

わかった...

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.

それで、gccの知識が不足しているため(ただし、Googleの能力はある程度あります)、これを見つけて試してみます...

un@un:~/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

そして私は得る...

/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はオプションではありません。

更新これも機能していません...

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
4

5 に答える 5

8

Androidシステムファイルとヘッダーの場所をGCCに指示する必要があります。次のいずれかを使用します。

  1. ndk-buildAndroid.mkBUILD_EXECUTABLE
  2. または、--sysrootGCCオプション

[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
于 2013-01-13T22:12:10.857 に答える
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リンクの観点から「代替」とは何かを知りたいです。

于 2013-01-13T22:31:41.820 に答える
5

この回答は、@deltheilの回答にもう少し詳細を追加します。AndroidでI2CバスをデバッグするためのI2Cツールをコンパイルしようとしたときと同様の問題が発生しました。どういうわけか、makeファイルで1日以上苦労し、-sysrootや--dynamic-linkerオプションなどのさまざまなオプションを試した後、ついにAndroidAOSPツリー内でコンパイルしようとしました。Google Nexus-S AOSPを使用して、SamsungS3電話で実行する予定のバイナリを作成しました。AOSP / externalフォルダー内のソース用にi2c-toolsというフォルダーを作成し、Android.mk、Cleanspec.mk、MODULE_LICENCEを別の実行可能フォルダー(ping)からコピーして、i2c-tools用に次のように変更しました。

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)/ tools&includeフォルダーから必要なすべてのソースファイルとヘッダーファイルをコピーし、#includeの一部を変更して、現在と同じ場所にあるヘッダーファイルの余分なパスを削除する必要があることに注意してください。 c-source。

于 2013-06-21T17:50:14.977 に答える
0

私の場合、.oファイルが必要で、 main()を定義する必要はありませんでした。-cスイッチを指定する必要がありました:

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

ここで、〜/ ax〜/ anはリンクです:

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

ダミーをしました。

于 2014-04-11T12:52:05.370 に答える
0

私は問題を解決しました、ubuntuのデフォルトの圧縮ファイルマネージャーはシンボリックリンクを抽出していなかったので、私は:tarjxffilename.tar.bz2を試してndk.tar.bz2をuntarしましたそして今それはうまくいきます

于 2014-09-20T11:04:36.840 に答える