ale*_*2k8 96 java-native-interface logging android android-ndk
我的make文件有什么问题?
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)
Run Code Online (Sandbox Code Playgroud)
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");
}
Run Code Online (Sandbox Code Playgroud)
NDK建造
foo.c:9: undefined reference to `__android_log_print'
Run Code Online (Sandbox Code Playgroud)
Rya*_*ves 87
在您的Android.mk文件中尝试以下内容:
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
Run Code Online (Sandbox Code Playgroud)
Bor*_*edT 83
如果您使用Android Studio和gradle,则会忽略Android.mk.将其添加到build.gradle文件中:
android {
defaultConfig {
ndk {
moduleName "your_module_name"
ldLibs "log"
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 29
对于Android Studio 2.2和tools.build:gradle:2.2.0,使用CMake在CMakeLists.txt中添加或编辑行:
target_link_libraries(<your_library_name>
android
log)
Run Code Online (Sandbox Code Playgroud)
这就是将日志库连接到你的库.
小智 16
如果您升级到Android Studio 2.1,上面的答案不起作用,需要使用ldLibs.add()来加载lib,如下所示:
android.ndk {
moduleName = "[the_module_name]"
ldLibs.addAll(['android', 'log'])
}
Run Code Online (Sandbox Code Playgroud)
如果您正在从事的项目具有以下与其他“标准”答案不同的特征:
以下target_link_libraries用法使它:
find_library(ANDROID_LOG_LIB log)
target_link_libraries(${TARGET_NAME} ${ANDROID_LOG_LIB})
Run Code Online (Sandbox Code Playgroud)
作为TARGET_NAME要构建的目标的名称(之前已使用add_library或进行设置add_executable)。
find_library与正确设置工具链同样重要(使用 Android SDK 提供的工具链,ANDROID_SDK_HOME/cmake/<version>/android.toolchain.cmake以便设置CMAKE_SYSROOT由find_命令使用的工具链)。
我们可以通过3种方式链接Android中的共享库.在以下3个案例中,应加入所述行Android.mk
所以这有三种方式.
1. LOCAL_LDLIBS way
LOCAL_LDLIBS := -llog
Run Code Online (Sandbox Code Playgroud)
出于某种原因,如果1不起作用(它对我不起作用),你可以尝试以下两种方式
2. LOCAL_LDFLAGS way
LOCAL_LDFLAGS := -llog
3. LOCAL_SHARED_LIBRARIES way
LOCAL_SHARED_LIBRARIES += liblog
Run Code Online (Sandbox Code Playgroud)
当然,您还需要包含#include <android/log.h> 在C/H文件中.