내 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)
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 빌드
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 ()를 사용하여 아래와 같이 lib를로드해야합니다.
android.ndk {
moduleName = "[the_module_name]"
ldLibs.addAll(['android', 'log'])
}
답변
Android에서 공유 라이브러리를 3 가지 방법으로 연결할 수 있습니다. 3 개 이하의 경우 언급 된 줄을Android.mk
여기에 세 가지 방법이 있습니다.
1. LOCAL_LDLIBS way
LOCAL_LDLIBS := -llog
어떤 이유로 1이 작동하지 않으면 (나에게 적합하지 않음), 아래 두 가지 방법을 시도 할 수 있습니다.
2. LOCAL_LDFLAGS way
LOCAL_LDFLAGS := -llog
3. LOCAL_SHARED_LIBRARIES way
LOCAL_SHARED_LIBRARIES += liblog
물론 #include <android/log.h>
C / H 파일 에도 포함시켜야 합니다.
답변
작업중인 프로젝트에 다른 ‘표준’답변과 다른 다음과 같은 특성이있는 경우 :
- Android Studio를 사용하지 않음
- Gradle 및 통합 CMake를 사용하지 않음
- 빌드에 Android.mk 또는 Application.mk가 전혀 사용되지 않음
- CMake 및 도구 모음을 직접 사용 (프로젝트가 Qt 기반이고 QtCreator를 사용하지 않을 수도 있음)
다음 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
물론 제대로 툴체인을 설정으로 (안드로이드 SDK에서 제공하는 툴체인을 사용 똑같이 중요 ANDROID_SDK_HOME/cmake/<version>/android.toolchain.cmake
이 설정되도록 CMAKE_SYSROOT
에서 사용되는 find_
명령).