Как заставить флаг -fpermissive вступить в силу?

Я создаю библиотеку на С++ с помощью NDK (Android). Вывод говорит мне, что некоторый код помечен как ошибка, но его можно подавить с помощью флага -fpermissive. По крайней мере, так это выглядит для меня. Результат:

MyClass.cpp:412:1: error: jump to label 'extractUp' [-fpermissive]
 extractUp:
 ^
jni/../../../../SharedSrc/MyClass.cpp:469:10: error:   from here [-fpermissive]
     goto extractUp;
          ^
jni/../../../../SharedSrc/MyClass.cpp:402:31: error:   skips initialization of 'Foo* ISC'
      Foo *ISC = new Foo;

Код, вызывающий ошибку, здесь не имеет значения, поскольку вопрос, который я задаю, заключается в том, что может помешать вступлению в силу флага -fpermissive. Makefile (Android.mk) кажется правильным в том, как он устанавливает флаг, но я мало что знаю о файлах make:

add_definitions(-DFPERMISSIVE=1)

Я также попробовал -Dfpermissive на случай, если все заглавные буквы не разрешены, и попытался добавить его в LOCAL_CFLAGS с помощью:

LOCAL_CFLAGS += -Dfpermissive

а также

LOCAL_CFLAGS += -DFPERMISSIVE

person Alyoshak    schedule 10.09.2015    source источник


Ответы (2)


На самом деле это не определение флага, поэтому вы не должны использовать -Dflagname, а только -fpermissive, который является флагом для компилятора.

-Dflagname имеет эффект #define flagname, а это не то, что вам нужно делать.

Кстати, -fpermissive не подавляет ошибки, а просто понижает их уровень до предупреждений.

person Jack    schedule 10.09.2015
comment
не могли бы вы уточнить, как использовать его как просто -fpermissive? Я изменил строку LOCAL_CFLAGS в своем примере, чтобы просто использовать -fpermissive, и теперь он жалуется на нераспознанный параметр командной строки «-fpermissive». - person Alyoshak; 11.09.2015
comment
Я также попытался просто добавить -fpermissive в командную строку. Я запустил ndk-build -fpermissive, но он отвечает make: permissive: Нет такого файла или каталога и вторая строка после этого make: *** Нет правила, чтобы сделать цель «разрешающей». Останавливаться. Как заставить его распознавать -fpermissive? - person Alyoshak; 11.09.2015
comment
Вы пробовали с APP_CFLAGS? .com/questions/13323655/ - person Jack; 11.09.2015
comment
Да, с тем же результатом, что и в первом посте. - person Alyoshak; 11.09.2015
comment
Я использовал NDK_LOG=1 при сборке, что действительно дает более подробный вывод, но не уверен, что эта информация вам нужна. Как получить эффективную команду сборки? - person Alyoshak; 11.09.2015

Вы можете добавить APP_CFLAGS += или APP_CPPFLAGS += в свой файл Application.mk.

Для кода C++ вам нужно использовать APP_CPPFLAGS += -fpermissive

Где, что касается кода C, вы используете APP_CFLAGS += -fpermissive

Также возможно использовать их оба в вашем файле Application.mk, если ваш проект содержит оба кода.

person Hashim Akhtar    schedule 20.05.2020