メイクファイルの何が問題になっていますか?
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := foo
LOCAL_SRC_FILES := foo.c
LOCAL_EXPORT_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
foo.c
#include <string.h>
#include <jni.h>
#include <Android/log.h>
#define LOG_TAG "foo"
#define LOGI(...) __Android_log_print(Android_LOG_INFO, LOG_TAG, __VA_ARGS__)
void test() {
LOGI("test");
}
ndk-build
foo.c:9: undefined reference to `__Android_log_print'
Android.mk
ファイル:
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
追加する必要があります
LOCAL_LDLIBS := -llog
android.mkへ
Android Studioとgradleを使用する場合、Android.mkは無視されます。これをbuild.gradleファイルに追加します。
Android {
defaultConfig {
ndk {
moduleName "your_module_name"
ldLibs "log"
}
}
}
Android Studio 2.2およびtools.build:gradle:2.2.0 CMakeを使用してCMakeLists.txtの行を追加または編集します。
target_link_libraries(<your_library_name>
Android
log)
それはあなたにログライブラリを接続しています。
Android Studio 2.1、上記の回答が機能しない場合にアップグレードする場合、ldLibs.add()を使用して以下のようにライブラリをロードする必要があります。
Android.ndk {
moduleName = "[the_module_name]"
ldLibs.addAll(['Android', 'log'])
}
共有ライブラリをAndroidで3つの方法でリンクできます。以下の3つのケースでは、記載されている行をAndroid.mk
に追加する必要があります
そのため、次の3つの方法があります。
1. LOCAL_LDLIBS way
LOCAL_LDLIBS := -llog
何らかの理由で1が機能しない場合(私にとっては機能しませんでした)、以下の2つの方法を試すことができます
2. LOCAL_LDFLAGS way
LOCAL_LDFLAGS := -llog
3. LOCAL_SHARED_LIBRARIES way
LOCAL_SHARED_LIBRARIES += liblog
もちろん、C/Hファイルに#include <Android/log.h>
を含める必要もあります。
の代わりに
Android Studio 1.3で新しいGradle NDK統合を使用する場合、ldLibs = ["Android"、 "log"]をAndroid.ndkオプションに追加する必要があります-Stephen Kaiser Sep 24 at 4 20
実験プラグインにldLibs.addAll(["Android", "log"])
を使用します
作業中のプロジェクトに、他の「標準」回答とは異なる次の特性がある場合:
次の target_link_libraries を使用すると、次のようになります。
find_library(Android_LOG_LIB log)
target_link_libraries(${TARGET_NAME} ${Android_LOG_LIB})
TARGET_NAME
ビルドするターゲットの名前(add_library
またはadd_executable
で設定済み).
find_library
も同様に重要です。ツールチェーンを適切にセットアップします(Android SDK at Android_SDK_HOME/cmake/<version>/Android.toolchain.cmake
で提供されるツールチェーンを使用して、CMAKE_SYSROOT
をセットアップします。 find_
コマンドによる)。
追加
LOCAL_SHARED_LIBRARIES:= \
libbinder \
liblog \
android.mkへ
これは私を助けました:
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := nativeDemo
LOCAL_SRC_FILES := main.cpp
LOCAL_LDLIBS += -llog
include $(BUILD_SHARED_LIBRARY)
Android studioバージョン2.2以降では、新しいプロジェクトを作成するときにCPPの組み込みサポートがあります。また、デフォルトでliblog.soが含まれています。ヘッダーファイル(Android/log.h)。
新しいAndroid studioプロジェクトを作成するときにスタジオによって作成されるapp/CMakeLists.txtをチェックアウトします。loglibのfind_library()ブロックとtarget_link_libraries()ブロックが既に存在することがわかります。
また、関数の構文に注意してください。そのはず:
__ Android_log_print(int priority、const char * tag、const char * fmt、...);
私の場合、タグパラメータを省略し、最終的には3日間を費やして計算しました。
CMakeの詳細: CおよびC++コードをプロジェクトに追加