小编nax*_*nge的帖子

Android NDK:包括boost c ++库

我正在尝试使用NDK在我的Android应用程序中使用boost库.我在这里这里找到了几个成功案例,但我不能对我说同样的话.我特意尝试在此链接中使用库,以及boost线程库.在下面的代码中,我只是尝试包含线程库,而不是数学库.我用来构建boost库的过程与我附加的第一个链接几乎相同.

到目前为止,似乎我已经成功构建了boost库,但是当我运行时ndk-build,我收到以下错误:

Prebuilt       : libboost_thread.a <= <NDK>/sources/
cp: omitting directory `path/to/ndk/sources/boost'
make: *** [obj/local/armeabi/libboost_thread.a] Error 1
Run Code Online (Sandbox Code Playgroud)

显然这cp: omitting directory...不是一个错误.但我唯一能得到的就是下一行,这并不是什么意思.Error 1

这是我的Android.mk文件:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_STATIC_LIBRARIES := boost_thread
LOCAL_LDLIBS := lboost_system-gcc-md lboost_thread-gcc-md -lgnustl_static
LOCAL_LDLIBS += lboost_system-gcc-md lboost_thread-gcc-md \
         -L$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/libs/armeabi \
         -lgnustl_static  
LOCAL_SRC_FILES := #cpp_sources
LOCAL_MODULE := com_example_ndkFile_CppMethods
include $(BUILD_SHARED_LIBRARY)
$(call import-module,boost) 
Run Code Online (Sandbox Code Playgroud)

并且还有一个Android.mk文件path/to/ndk/sources/boost/:

LOCAL_PATH:= $(call my-dir)  
include $(CLEAR_VARS)  
LOCAL_MODULE:= boost_thread
LOCAL_SRC_FILES:= android/lib/libboost_thread.a  
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)  
include …
Run Code Online (Sandbox Code Playgroud)

android boost makefile android-ndk

24
推荐指数
2
解决办法
3万
查看次数

Android C++:使用 ndk 从资产中读取文本文件

我正在尝试从存储在 android 项目的资产文件夹中的文本文件创建输入流,但遇到了一些问题。仅像在常规桌面程序(使用ifstream file_handle; file_handle.open("path/to/fileName");)中那样提供文件路径就足够了,还是必须以其他方式将其加载到应用程序中?如果是后者,那么在 ndk 中执行此操作的代码是什么?我还能将文件用作ifstream对象吗?

谢谢,

交换

c++ android ifstream android-ndk

4
推荐指数
1
解决办法
6024
查看次数

C++:列出迭代器与矢量迭代器

我认为迭代器对象的想法是你可以类似地将它应用于C++容器类.但是,当我尝试遍历列表对象时,我尝试使用

for(list<int>::iterator it = obj.begin(); it < obj.end(); it++){
    // some code
}
Run Code Online (Sandbox Code Playgroud)

我收到了一个错误.为什么这不起作用?它为什么会起作用vector::iterator?是仅仅因为列表的实现是双向链表?我认为迭代器对象抽象了通过容器移动的概念,从而允许它在操作上是相同的,无论是向量还是列表.

我真的很感激澄清.

c++ containers iterator stl

2
推荐指数
1
解决办法
650
查看次数

C++:向量容器和<algorithm> std :: find

我创建了一个包含变量信息的结构,即它们的名称和编号

struct var{
  string name;
  int value;
};
Run Code Online (Sandbox Code Playgroud)

现在,我想使用迭代器来更新它,使用以下函数:

void updateVariable(vector<Variable>& vars,Variable& newVar){
    vector<Variable>::iterator it = find(vars.begin(), vars.end(), newVar);

    if(it == vars.end()){
        vars.push_back(newVar);
    }
    else{
        *it = newVar;
    }
}
Run Code Online (Sandbox Code Playgroud)

只是为了确定,我得到的错误是调用find()的行.任何想法为什么我收到错误?这是错误:

/usr/include/c++/4.6/bits/stl_algo.h:162:4: error: no match for ‘operator==’ in ‘__first.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = Variable*, _Container = std::vector<Variable>, __gnu_cxx::__normal_iterator<_Iterator, _Container>::reference = Variable&]() == __val’
Run Code Online (Sandbox Code Playgroud)

更新:

谢谢大家的快速帮助,以及明确的答案!

c++ iterator stl vector

1
推荐指数
1
解决办法
1072
查看次数

Java:将数组作为方法中的引用类型

我正在从C ++迁移到Java,并且在理解数组如何在Java中如何在其创建方法之外持久存在一个问题。请看下面的简单代码:

public static int[] arrayMethod(){
    int[] tempArray = {1, 2, 3, 4};
    return tempArray;
}

public static void main(String[] args){
    int arr[] = arrayMethod();
    for(int i : arr){
        System.out.println(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

在C ++中,除非使用new操作符动态分配数组,否则在调用后该数组将不存在,因为它是在方法中本地创建的。据我了解,Java总是按值传递,而数组是引用类型,因此我的c ++逻辑会告诉我,我正在返回对本地创建的数组的引用。我想念什么?

java local-variables pass-by-value

1
推荐指数
1
解决办法
6264
查看次数

C/C++指针技巧修复

我正在尝试这个指针技巧,我无法弄清楚如何修复它,我在64位的ubuntu 12.04上运行g ++ 4.6.看看下面的代码:

int arr[5];
arr[3] = 50;
((short*) arr)[6] = 2;
cout << arr[3] << endl;
Run Code Online (Sandbox Code Playgroud)

逻辑是:因为short是2个字节,int是4个字节,我想改变前2个字节arr[3],同时保持后2个字节的值为50.所以我只是搞乱位模式.不幸的是,sizeof(int*)sizeof(short*)都是8个字节.是否存在返回大小为2字节的指针的类型转换?

更新:

我意识到这个问题编写得很糟糕,所以我会解决这个问题:cout << arr[3] << endl;我得到的输出是2.我想得的输出既不是2也不是50,而是大数,表示左边的部分int位模式的更改已经更改,而存储在arr [3]中的int的右侧部分(第二个2位)仍未更改.

c c++ pointers dereference

0
推荐指数
2
解决办法
241
查看次数