@xverizex

Как в android исправить macro redifinition?

делаю игру на си с sdl2. понадобилась функция epoll_create1. но она появилась в android в версии api 21. я в android.mk указываю так.
LOCAL_CFLAGS := -D__ANDROID_API__=21
начинаю компилировать код, а он пишет
<built-in>:350:9: note: previous definition is here
#define __ANDROID_API__ 16
        ^
/home/cf/projects/build/SDL2-2.0.12/build/com.xverizex.space_travels/app/jni/src/./engine/font.c:188:12: warning: implicitly declaring library function 'wcslen' with type 'unsigned int (const int *)' [-Wimplicit-function-declaration]
        int len = wcslen ( text );
                  ^
/home/cf/projects/build/SDL2-2.0.12/build/com.xverizex.space_travels/app/jni/src/./engine/font.c:188:12: note: include the header <wchar.h> or explicitly provide a declaration for 'wcslen'
2 warnings generated.
[x86] Compile        : main <= actor.c
In file included from <built-in>:357:
<command line>:4:9: warning: '__ANDROID_API__' macro redefined [-Wmacro-redefined]
#define __ANDROID_API__ 21
        ^
<built-in>:350:9: note: previous definition is here
#define __ANDROID_API__ 16
        ^
1 warning generated.
[x86] Compile        : main <= button.c
In file included from <built-in>:357:
<command line>:4:9: warning: '__ANDROID_API__' macro redefined [-Wmacro-redefined]
#define __ANDROID_API__ 21
        ^
<built-in>:350:9: note: previous definition is here
#define __ANDROID_API__ 16

и не написано где это определено. я искал с помощью egrep, но ничего не нашел. что делать?
P.S. я нашел способ, чтобы решить проблему. чтобы всё работало, нужно записать в Application.mk
APP_PLATFORM=android-21
А также записать в файл, который находится в каталоге app проекта - build.gradle. и заменить на 21 api.
minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        externalNativeBuild {
            ndkBuild {
                arguments "APP_PLATFORM=android-21"
                abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
            }
            // cmake {
            //     arguments "-DANDROID_APP_PLATFORM=android-16", "-DANDROID_STL=c++_static"
            //     // abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
            //     abiFilters 'arm64-v8a'
            // }
        }
    }
  • Вопрос задан
  • 190 просмотров
Пригласить эксперта
Ответы на вопрос 1
@xverizex Автор вопроса
Всё я нашел как исправить. надо было еще в build.gradle исправить версию.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы