解决NDK无法解析<iostream>的方法

NDK之所以无法解析<iostream>是因为ndk使用的c++库是bionic。这个库几乎包含了所有c标准库,但是只包含了一个c++的轻量库,这里面没有<iostream>。要想加载<iostream>就必须加载c++标准库,我们分3个步骤完成:

        1.新建Appcation.mk文件(这是一个关于你所需要的动态库或静态库的makefile文件),然后在写一句话:

APP_STL := stlport_static 

这句话表示加上STLport这种类型的库,这里面包括了c++标准库。


2.在Android.mk文件里加两句(加粗的两句):

LOCAL_PATH := $(call my-dir)


include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c

LOCAL_C_INCLUDES := $(NDK_ROOT)/sources/cxx-stl/stlport/stlport
LOCAL_LDLIBS := $(NDK_ROOT)/sources/cxx-stl/stlport/libs/armeabi/libstlport_static.a


include $(BUILD_SHARED_LIBRARY)

加粗的第一句表示包含STLport库的头文件,第二句表示链接到STLport的lib库上面。


3.完成以上两步,你还是无法解析<iostream>,你可以试试再完成第三步:


项目资源管理界面下,找到你的项目,右击它,然后点击属性。在C++常规->路径和符号中,我们选择添加NDK目录下面的sources\cxx-stl\stlport\stlport文件。就像图片上面的圈红的那个文件。这样eclipse就认识<iostream>以及它的symbol了。

什么,完成以上3步,你的eclipse还是无法解析<iostream>?那么恭喜你,你还要折腾好一阵了。也许你可以试试crystax的第三方NDK-----android-ndk-r8-crystax,这是一个包含了C++标准库的非官方NDK。我是试过android-ndk-r8-crystax的,感觉加载起来太慢了,所以就放弃了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
<QJniObject>是Qt QML中的一个自定义组件,用于在Qt QML中调用Java代码。这个组件需要使用Qt Android Extras模块,因为它是为Android平台开发的。使用<QJniObject>,可以通过JNI(Java Native Interface)调用Java的方法和属性,以便与Java代码进行交互。 该组件提供了以下属性和方法: - className: 要调用的Java类的名称。 - objectName: 给Java对象设置的名称。 - onCreated: 当Java对象创建时调用的信号。 - onDestroyed: 当Java对象销毁时调用的信号。 - callMethod(methodName, returnType, argumentTypes, arguments): 调用Java方法。 - getProperty(propertyName, propertyType): 获取Java属性值。 - setProperty(propertyName, propertyValue): 设置Java属性值。 使用<QJniObject>的步骤如下: 1. 导入Qt Android Extras模块:`import QtAndroidExtras 1.0` 2. 在需要使用Java代码的Qt QML文件中,添加<QJniObject>组件。例如: ``` Item { id: root QJniObject { id: javaObject className: "com.example.MyJavaClass" objectName: "myJavaObject" onCreated: { console.log("Java object created"); } onDestroyed: { console.log("Java object destroyed"); } } Button { text: "Call Java Method" onClicked: { var result = javaObject.callMethod("myJavaMethod", "void", ["int"], [42]); console.log("Java method called with result: ", result); } } } ``` 3. 在Java代码中,创建一个与<QJniObject>组件中指定的className和objectName相同的Java对象。例如: ``` package com.example; public class MyJavaClass { public void myJavaMethod(int value) { System.out.println("myJavaMethod called with value: " + value); } } ``` 注意:使用<QJniObject>时,需要将Java代码打包成一个Android应用程序,并在Qt Creator中使用Android SDK和NDK进行部署和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值