неопределенная ссылка на `__android_log_print ' - PullRequest
95 голосов
/ 16 декабря 2010

Что не так с моим файлом 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-build

foo.c:9: undefined reference to `__android_log_print'

Ответы [ 12 ]

1 голос
/ 07 августа 2015

Это помогло мне:

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)
0 голосов
/ 27 сентября 2017

В Android Studio версии 2.2 и выше встроенная поддержка CPP существует при создании нового проекта.Кроме того, liblog.so включен по умолчанию.Ничего не поделаешь, кроме файла заголовка (android / log.h).

Checkout app / CMakeLists.txt, который создается студией при создании нового андроид-проекта студии.Мы можем видеть, что блок find_library () и target_link_libraries () для loglib уже присутствуют.

Также обратите внимание на синтаксис функции.Это должно быть:

__ android_log_print (int priority, const char * tag, const char * fmt, ...);

В моемВ этом случае я пропустил параметр тега и потратил три дня на его выяснение.

Подробнее о CMake: Добавление кода C и C ++ в ваш проект

...