如何在clang中使用-v获得未定义引用错误的详细输出(Android Studio)

如何在clang中使用-v获得未定义引用错误的详细输出(Android Studio),android,android-studio,android-ndk,clang,Android,Android Studio,Android Ndk,Clang,当您在AndroidStudio中遇到链接器错误时,它建议您使用-v查看调用,但是将-v命令放在何处以获取“详细输出”() 已尝试: externalNativeBuild { cmake { cppFlags "-frtti -fexceptions -v" } } 据我所知,这并没有改变输出中的任何内容 --stacktrace—调试 在 这显示了更多的输出,但不是我想要的

当您在AndroidStudio中遇到链接器错误时,它建议您使用-v查看调用,但是将-v命令放在何处以获取“详细输出”()

已尝试:

externalNativeBuild {
            cmake {
                cppFlags "-frtti -fexceptions -v"
            }
        }
据我所知,这并没有改变输出中的任何内容

--stacktrace—调试

这显示了更多的输出,但不是我想要的
非常感谢您事先的帮助

编辑

由于我在编译C文件,我显然不得不使用cFlags。现在gradle文件如下所示(thx到@Alex Cohn):

  • cppFlags“-frti-fexceptions-v”
    cppFlags“-frti”、“-fexceptions”、“-v”
    一样适用于clang++任务,即为.cpp.cxx文件编译获取详细输出

  • cFlags“-v”
    用于生成.c文件编译的详细输出

  • 要生成链接步骤的详细输出,请编辑CMakeLists.txt文件,将
    -v
    添加到相关的目标链接库语句中,例如

    target_link_libraries(myjnilib android log -v)
    
  • 所有这些可能不足以理解和修复未定义的引用错误

  • 您是否尝试过
    cppFlags“-frti”、“-feexceptions”、“-v”
    ?只是尝试了一下,但没有成功。cppFlags“-frti-fexceptions”是自动生成的,我只在那里添加了-v,这很奇怪;实际上,对我来说,逗号分隔列表和带空格的引号字符串都有效。你应该检查你的
    app/.externalNativeBuild/cmake/debug/armeabi-v7a/android\u gradle\u build.json
    文件。但我有一个假设:也许你正在编译一个C文件?哦,是的,我是!那么我该如何更改flag语句呢?CFLAG不起作用?!对我来说,cFlags有效。但是不要把
    “-frti-feexceptions”
    放在cFlags中,C编译器会抱怨在我的例子中,链接器错误是在几个C文件中缺少预处理器命令(请参阅我答案中的更新2)。我需要这个命令,因为我使用Android Studio创建的默认.cpp文件作为我的Java接口类。。。非常感谢您的帮助和时间@Alex Cohnw在设置>构建、执行、部署(as 3.0)中将“-debug”设置为命令行选项,这对我有额外的帮助。然后我能看到一些缺少链接器的引用-考虑把这个添加到你的列表中。
    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.3"
        defaultConfig {
            applicationId "<my_id>"
            minSdkVersion 16
            targetSdkVersion 25
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            externalNativeBuild {
                cmake {
                    cFlags "-v"
                }
            }
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
        externalNativeBuild {
            cmake {
                path "CMakeLists.txt"
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
            exclude group: 'com.android.support', module: 'support-annotations'
        })
        compile 'com.android.support:appcompat-v7:25.3.1'
        compile 'com.android.support.constraint:constraint-layout:1.0.1'
        testCompile 'junit:junit:4.12'
    }
    
    #ifdef __cplusplus
    extern "C"
    {
    #endif   
    
    // your includes and your code here
    
    #ifdef __cplusplus
    }
    #endif
    
    target_link_libraries(myjnilib android log -v)