`
leng_cn
  • 浏览: 301829 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

NDK编译时问题总结

 
阅读更多
ndk编译C++,提示找不到头文件(ndk-build error: string: No such file or directory)
在所在目录 工程/jni/Application.mk(即和Android.mk同级目录)
----------cut start------------------------------
# 标准库
APP_STL := gnustl_static----------cut end------------------------------
添加 APP_STL := gnustl_static
即可找到标准库

在工程目录下的jni文件夹下编写的c/c++代码在编译时,通常会遇到如下的几种类型错误:

1、Unresolved inclusion:<XXX>

2、syntax error

3、Function 'XXX' could not be resolved

4、Type 'XXX' could not be resolved

5、Symbol 'XXX' could not be resolved

6、Method 'XXX' could not be resolved

7、Invalid arguments 'Candidates are: ...'


错误原因:

大多数情况是因为相关头文件没有加入导致,也有一些是因为一些参数无效导致的(当然无效参数也可能是因为头文件未加入,见下述)。


相关错误解决方法——添加头文件:

错误内容一:

    1、Unresolved inclusion: <jni.h>、Unresolved inclusion: <stdio.h>、Unresolved inclusion: <malloc.h>、Unresolved inclusion: <Android/log.h>、...
    2、Function '__android_log_print' could not be resolved、Type 'JNIEnv' could not be resolved、Type 'jstring' could not be resolved、Type 'jclass' could not be  resolved、Function 'malloc' could not be resolved、Function 'memcpy' could not be resolved、Method 'FindClass' could not be resolved、Type 'jsize' could not be  resolved、Symbol 'NULL' could not be resolved、...

解决方法:

    右击项目 --> Properties --> 左侧C/C++ General --> Paths and Symbols --> 右侧Includes --> GNU C++(.cpp) --> Add

                                                                                                                                                                 | __>GNU C(.c)        __|

${NDKROOT}\platforms\android-18\arch-arm\usr\include
错误内容二:

    1、Unresolved inclusion: <iostream>、Unresolved inclusion: <fstream>、Symbol 'std' could not be resolved、..

    2、Type 'fstream' could not be resolved、Symbol 'in' could not be resolved、Method 'seekg' could not be resolved、Method 'read' could not be resolved、...

解决方法:

    添加路径(步骤见上述解决方法):

${NDKROOT}\sources\cxx-stl\gnu-libstdc++\4.8\include 、${NDKROOT}\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi\include

错误内容三:

    Invalid arguments 'Candidates are:void * malloc(?)'、Invalid arguments 'Candidates are:void * memcpy(void *, const void *, ?)'

解决方法:

    添加路径(步骤见上述解决方法):

${NDKROOT}\toolchains\arm-Linux-androideabi-4.8\prebuilt\windows\lib\gcc\arm-linux-androideabi\4.8\include




相关错误解决方法——符号替换:


有时编译时会遇到这样的错误提示:Invalid
arguments 'Candidates are:std::basic_istream<char,std::char_traits<char>> & read(char *, ?)',尽管我们添加了相应的头文件,但仍然有无效参数这样的错误,错误提示中的‘?’表示无效参数。

碰到这类错误,可以索引到对应函数(ctrl+点击该函数)read,查看函数定义中的参数类型,此函数索引到的头文件中的参数类型为streamsize,但使用时用到的long。

解决方法:


右击项目 --> Properties --> 左侧C/C++ General --> Paths and Symbols --> 右侧Symbols --> GNU C++(.cpp) --> Add

                                                                                                                                                              | __>GNU C(.c)        __|

Name的值:streamsize,Value的值:long

添加完成后,点击确定后,错误消失。
分享到:
评论

相关推荐

    iperf2 iperf3 Android平台 ndk编译指南,常见问题解决方法

    iperf 2 ,3 的android 平台移植笔记,ndk 选择,交叉编译工具链的编译和配置,编译结果的验证,常见错误的处理方法。工作实践中的总结。

    用Android_NDK编译FFmpeg,RTSP手机视频

    ### 使用Android NDK编译FFmpeg与实现RTSP手机视频功能 #### 一、前言 随着移动设备处理能力的不断增强,越来越多的应用程序开始利用原生的C/C++代码来提高性能,尤其是在多媒体处理领域。FFmpeg是一款强大的跨平台...

    android JNI运行NDK编译成的可执行文件

    在本主题中,我们将深入探讨如何在Android环境中使用JNI运行由NDK编译生成的可执行文件。 首先,理解NDK的基本工作原理是至关重要的。NDK提供了一套工具链,允许开发者在本地环境中编译源代码,生成适用于Android...

    eclipse中ndk 自动编译配置

    配置NDK编译规则 - 在`jni`文件夹下创建一个名为`Application.mk`的文件。 - 编辑该文件,指定应用的最低API版本和支持的ABI类型: ```makefile APP_ABI := armeabi-v7a arm64-v8a x86 x86_64 APP_MIN_API :=...

    libiconv直接可编译ndk可用

    总结来说,libiconv是一个强大的字符集转换库,对于处理多语言编码问题非常有用。在Android NDK环境下,通过简单的`ndk-build`命令,开发者可以方便地编译libiconv并将其集成到应用中,实现高效的字符编码转换功能。...

    安卓ndk编译curl、openssl、iconv.rar

    总结来说,这个教程旨在帮助开发者在Android环境下通过NDK编译和集成curl、openssl和iconv这三个重要的开源库,使得开发者能够在原生代码层实现更复杂的网络通信、加密解密和字符集转换功能。通过学习和实践这个教程...

    使用NDK编译Android第三库.so和.a 参考Github上的工程,仅 有OpenSSL为例pdf

    总结,使用NDK编译Android第三方库,如OpenSSL,涉及到一系列步骤,包括环境配置、源码获取、构建系统配置、编译选项设置、编译和链接、生成.so文件、集成到项目以及在Java代码中的使用。这个过程可能复杂且耗时,但...

    NDK测试demo 编译c++ 文件

    在`android`块中添加`externalNativeBuild`部分,定义NDK编译的配置。例如: ```groovy android { ... defaultConfig { ... externalNativeBuild { cmake { cppFlags "-std=c++11 -frtti -fexceptions" abi...

    libevent(2.1.8)库及头文件文件

    如果在更高版本的NDK上遇到问题,可能需要检查兼容性、链接库或编译选项。 7. **跨平台兼容性**:Libevent的一个重要优势就是其跨平台能力,可以用于Windows、Linux、Mac OS X等多种操作系统,并且在不同平台上都能...

    PCL for Android 编译过程遇到的问题及办法

    在编译FLANN时可能会遇到一些问题,如文档中提到的`CMakeList.txt`中的错误。通过注释掉部分代码可以暂时解决这些问题,但这并非长久之计。更建议的方法是深入研究这些错误的根本原因,并寻找解决方案。 4. **注意...

    Android Studio 基于NDK加密,防止反编译获取加密key

    3. **编译JNI库**:使用NDK编译生成.so动态链接库文件。 4. **加载JNI库**:在Android应用中加载.so文件,并通过Java的System.loadLibrary()方法调用JNI函数。 **防止反编译的其他策略:** 1. **混淆代码**:使用...

    ndk编译并与android相互传值

    总结,NDK和JNI结合使用,可以让Android应用充分利用C/C++的性能优势,同时实现Java和C/C++代码之间的通信。通过正确配置环境,编写本地库,声明和实现JNI接口,我们就可以在Android应用中无缝地集成原生代码。这...

    Linux使用NDK编译libtiff库并移植到Android平台

    总结,将libtiff库移植到Android平台需要对Android NDK有深入的理解,以及熟悉Linux环境下的编译过程。通过以上步骤,你可以成功地在Android应用中使用libtiff库处理TIFF图像。记住,这个过程可能需要根据具体需求...

    Android编译ndk的两种方式

    本篇文章将深入探讨两种主要的Android NDK编译方式:ndk-build和cmake,并通过一个简单的demo来阐述它们的使用方法。 ### 1. ndk-build **ndk-build** 是早期Android NDK中默认的构建系统,它基于Makefile,适合...

    android编译openssl静态库.a 动态库.so

    本篇文章将详细讲解如何在...总结来说,Android平台上编译OpenSSL静态库和动态库涉及对源代码的预处理、编译、链接等步骤,需要熟悉NDK环境和交叉编译技术。成功编译后,这些库文件将为Android应用提供强大的加密支持。

    android studio中使用ndk编译.so文件,调用C/C++代码(jni编程)

    下面我们将详细介绍如何在Android Studio中使用NDK编译.so文件以及调用C/C++代码的过程。 首先,我们需要在Android Studio中设置NDK路径。这通常在项目的build.gradle文件中的`externalNativeBuild`块内完成,通过...

    把外部ndk-android工程放入系统源码内一起编译

    通过以上步骤,可以将一个外部NDK-Android工程成功地整合到Android系统源码中,并且能够在编译系统时一并编译该工程。这种方法不仅提高了代码的可维护性和可扩展性,还使得开发者能够更加灵活地进行开发和测试工作。...

    NDK Google android ndk

    3. **编写Android.mk文件**:在`sources/&lt;mysrc&gt;`目录下创建`Android.mk`文件,用于描述给NDK编译系统的代码信息。 4. **编写Application.mk文件**:在`apps/&lt;myapp&gt;`目录下创建`Application.mk`文件,描述需要编译...

    ceres2.0.0编译Android的jni文件

    在Android开发中,有时我们...6. 使用NDK编译C++代码生成`libceres.so`。 7. 将库文件添加到Android项目中。 通过这个过程,你可以充分利用Ceres Solver的强大优化能力,为你的Android应用开发带来更高效的解决方案。

Global site tag (gtag.js) - Google Analytics