【问题标题】:How to get the -fpermissive flag to take effect?如何让 -fpermissive 标志生效?
【发布时间】:2015-09-10 23:19:50
【问题描述】:

我正在使用 NDK (Android) 用 c++ 构建一个库。输出告诉我,某些代码被标记为错误,但可以通过使用 -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

【问题讨论】:

    标签: c++ makefile android-ndk preprocessor-directive android.mk


    【解决方案1】:

    实际上这不是一个标志定义,所以你不应该使用-Dflagname,而应该使用-fpermissive,这是编译器的标志。

    -Dflagname 具有#define flagname 的效果,这不是您需要做的。

    顺便说一句,-fpermissive 不会抑制错误,它只是将它们降级为警告。

    【讨论】:

    • 您能否具体说明如何将它用作-fpermissive?我将示例中的 LOCAL_CFLAGS 行更改为仅使用 -fpermissive,现在它抱怨“无法识别的命令行选项 '-fpermissive'”。
    • 我也尝试在命令行上添加 -fpermissive。我运行了“ndk-build -fpermissive”,但它响应“make:permissive:没有这样的文件或目录”,然后是第二行“make:*** No rule to make target ‘permissive’。停止。”如何让它识别-fpermissive?
    • 你试过APP_CFLAGS吗?stackoverflow.com/questions/13323655/…
    • 是的,结果与初始帖子中报告的结果相同。
    • 我在构建时一直在使用 NDK_LOG=1,它确实提供了更详细的输出,但不确定该信息是否是您想要的。如何获得“有效的构建命令”?
    【解决方案2】:

    您可以在 Application.mk 文件中添加 APP_CFLAGS += 或 APP_CPPFLAGS +=。

    对于 C++ 代码,您需要使用 APP_CPPFLAGS += -fpermissive

    C 代码在哪里使用 APP_CFLAGS += -fpermissive

    如果您的项目包含这两个代码,也可以在 Application.mk 文件中同时使用这两个代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多