質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Android NDK

Android NDKとは、Android SDKと対を成すツールです。ネイティブコードのアプリ、またはC/C++言語の既存のポートライブラリでパフォーマンスクリティカルな部分を構築できます。ヘッダ、ライブラリを提供して、アクティビティやユーザ入力処理などを構築できます。

Q&A

解決済

1回答

3868閲覧

androidライブラリを64bit化に対応した場合のAndroid.mkの書き方について

sato4000

総合スコア42

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Android NDK

Android NDKとは、Android SDKと対を成すツールです。ネイティブコードのアプリ、またはC/C++言語の既存のポートライブラリでパフォーマンスクリティカルな部分を構築できます。ヘッダ、ライブラリを提供して、アクティビティやユーザ入力処理などを構築できます。

0グッド

0クリップ

投稿2019/05/20 01:25

編集2019/05/20 01:46

古いandroidライブラリを64bit化に対応したいのですが、Android.mkの書き方がわからない状況です。

下記Android.mkの内容でビルドをすると

clang: erroer: the clang compiler does not support '-mtune=arm1136jf-s'

と表示されたので、armv7-aを真似してarmv5teをarm64-v8aに変更したのですが、下記エラーが発生しました。

clang: erroer: the clang compiler does not support '-march=arm64-v8a'

'-march'と'-mtune'はどういう意味なのでしょうか。調べても見つけられずご教示願います。
又、'-march'と'-mtune'を削除するとビルドが成功するのですが、これでは64bitに対応できていないのでしょうか。

以前の環境
・Eclipse IDE for Java Developers
Version: Indigo Service Release 2
Build id: 20120216-1857
・Android SDK
・Android NDK
・ADT Plug-in for Eclipse

今回の環境
・Android studio
・Android SDK
・Android NDK

Android.mk

Android.mk

1LOCAL_PATH := $(call my-dir) 2 3include $(CLEAR_VARS) 4 5DEEP_OPTIMIZATION := false 6TARGET_ARCH_VARIANT := $(strip $(TARGET_ARCH_VARIANT)) 7LOCAL_CPP_EXTENSION := .cc 8LOCAL_ARM_MODE := arm 9LOCAL_CFLAGS := -Wall -Wextra -O3 10 11ifneq (,$(findstring arm,$(TARGET_ARCH))) 12### ARM 13ifndef TARGET_ARCH_VARIANT 14ifeq (armeabi-v7a,$(TARGET_ABI)) 15TARGET_ARCH_VARIANT := armv7-a 16else 17TARGET_ARCH_VARIANT := armv5te 18endif 19endif 20ifneq (,$(findstring armv7-a,$(TARGET_ARCH_VARIANT))) 21### ARMv7-A 22LOCAL_CFLAGS += -march=armv7-a -mtune=cortex-a8 23ifneq (,$(findstring -neon,$(TARGET_ARCH_VARIANT))) 24### Geratate NEON instructions. 25LOCAL_CFLAGS += -mfpu=neon -mfloat-abi=softfp 26else 27### Geratate VFP instructions. 28LOCAL_CFLAGS += -mfpu=vfpv3-d16 -mfloat-abi=softfp 29endif 30else 31### ARMv5TE (but tune for ARM1136JF-S (ARMv6)) 32LOCAL_CFLAGS += -mtune=arm1136jf-s 33endif 34ifneq (,$(findstring -vfp,$(TARGET_ARCH_VARIANT))) 35### Geratate VFP instructions. May have compatibility issue. 36LOCAL_CFLAGS += -mfpu=vfp -mfloat-abi=softfp 37endif 38else 39### x86 40endif 41 42ifdef DEEP_OPTIMIZATION 43ifeq (true,$(DEEP_OPTIMIZATION)) 44### Farther optimizations 45LOCAL_CFLAGS += -funroll-loops 46ifeq (,$(findstring clang,$(NDK_TOOLCHAIN_VERSION))) 47### Options only for GCC 48LOCAL_CFLAGS += -fgcse-sm -fgcse-las -fprefetch-loop-arrays 49else 50### Options only for LLVM/Clang 51LOCAL_CFLAGS += -fstrict-enums -fno-rtti -fno-math-errno 52endif 53endif 54endif 55 56LOCAL_CFLAGS += $(LOCAL_CFLAGS_OPT) 57LOCAL_MODULE := xxx 58LOCAL_SRC_FILES := xxx.c.arm 59LOCAL_SRC_FILES += xxx.cc.arm 60LOCAL_SRC_FILES += xxx.cc.arm 61LOCAL_SRC_FILES += xxx.c.arm 62LOCAL_SRC_FILES += xxx.c.arm 63LOCAL_SRC_FILES += xxx.c.arm 64LOCAL_SRC_FILES += xxx.c.arm 65LOCAL_LDLIBS := -llog 66LOCAL_LDLIBS += -lOpenSLES 67 68include $(BUILD_SHARED_LIBRARY)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

(回答可能な範囲での情報提供です)

'-march'と'-mtune'はどういう意味なのでしょうか。調べても見つけられずご教示願います。

いずれもClangコンパイラ向けのオプション指定です。

  • -march オプションは、バイナリ生成対象のマシンアーキテクチャを指定します。64bit/32bitの別は本パラメータで決まります。
  • -mtune オプションは、対象アーキテクチャ固有のバイナリ生成最適化パラメータを指定します。意味を理解できないうちは削除しても構わないと思います。

Android.mkビルドファイルで正式サポートするマシンアーキテクチャは、armeabi-v7a(32bit ARM), arm64-v8a(64bit ARM), x86(32bit Intel), x86_64(64bit Intel) のいずれかです。

資料 Android Multilib Build Cheat Sheet が参考になるかもしれません。


ちなみに armv5teアーキテクチャ/armeabiABIは Android NDK 17以降はサポートされません。またAndroid NDK r18b以降ではGCCは削除されました。かなり古いAndroid.mkファイルと見受けられますので、大幅な書き換えが必要そうですね。

投稿2019/05/20 06:29

編集2019/05/20 06:45
yohhoy

総合スコア6191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sato4000

2019/05/20 07:17

とても詳しいご回答をいただき誠にありがとうございます。再度質問して申し訳ありませんが、Android NDKでサポートしていないということはEclipse環境でビルドしようとしてもAndroid.mkの大幅な変更が必要な認識であっていますでしょうか? また、clangは元々'-march=arm64-v8a'をサポートしていないのか、それとも単に書き方が間違っているのどちらかおわかりでしょうか? もしわかっていたらご教示願います。
sato4000

2019/05/20 07:46

申し訳ありません。-march=armv8-aにしたらエラーが発生しなくなりました。
yohhoy

2019/05/20 08:04

古いAndroid NDKはアーカイブ https://developer.android.com/ndk/downloads/older_releases.html から入手可能だったと思います。 あくまで雰囲気リーディングですが、Android.mkは対象アーキテクチャ毎の分岐処理を記載していますので、古いアーキテクチャ向けの分岐は無視されるだけかもしれません。
sato4000

2019/05/20 23:20

ご教示いただきありがとうございます。ビルドできたので問題ないのか動作確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問