小编Luk*_*uke的帖子

Android NDK:如何让gcc使用额外的include目录

一个简单的问题(我使用android NDK r6与cygwin,但这是一个关于makefile和gcc的问题).假设我在dni mylib_v_1 /下面的jni /目录下放了一个库.Mylib的结构如下:

mylib_v_1
   mylib
      include
Run Code Online (Sandbox Code Playgroud)

在include目录下有两个文件myinc1.hpp和myinc2.hpp.在myinc1.hpp中有一行:

#include <mylib/myinc2.hpp>
Run Code Online (Sandbox Code Playgroud)

在我的.cpp文件中,在jni /目录下,有以下行:

#include <mylib/myinc1.hpp>
Run Code Online (Sandbox Code Playgroud)

我想设置Android.mk(或者需要设置其他文件)以便让gcc知道使用,作为附加的包含目录,jni/mylib_v_1 /以便使用#include括号(而不是两个)文件,在我的实际案例中有很多.hpp,其中包括许多带括号表示法的其他.hpp).

我怎样才能做到这一点?

谢谢.

PS.如果在.cpp文件中我以这种方式更改include:

#include "mylib/myinc1.hpp"
Run Code Online (Sandbox Code Playgroud)

gcc找到myinc1.hpp但是,在处理它时,它找到第二个包括:

#include  <mylib/myinc2.hpp>
Run Code Online (Sandbox Code Playgroud)

并停在那里,说它无法找到文件myinc2.hpp.

gcc makefile android-ndk

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

iPhone上的C++ Boost

我需要使用boost序列化代码.我正在Android上测试它(显然使用NDK).在我决定是否真的想在我的项目中使用boost序列化代码之前,我想知道是否可以在iPhone应用程序中编译和使用boost.我问这个问题是因为在Android上编译提升并不是一件容易的事情,因此iPhone上的提升可能与Android(叹息)一样难以编译.谢谢.

iphone boost

12
推荐指数
2
解决办法
8256
查看次数

不同编译器的枚举大小(以字节为单位)

enum的大小在不同的编译器(gcc,visual c和其他?)中总是相同的.也就是说,特定枚举的sizeof()是否为遵循C/C++标准的每个编译器提供相同的值?

c c++ compiler-construction enums

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

Android std和stl支持

我正在玩android ndk.我正在使用带有cygwin的Window Vista(最新版本).我在手机上编译并发布了hello world jni示例.这是工作.代码是(是一个.cpp文件):

#include <string.h>
#include <jni.h>

extern "C" {
JNIEXPORT jstring JNICALL     Java_org_android_helloworld_HelloworldActivity_invokeNativeFunction(JNIEnv* env, jobject     javaThis);
};


jstring Java_org_android_helloworld_HelloworldActivity_invokeNativeFunction(JNIEnv*     env, jobject javaThis)
{
    return  env->NewStringUTF("Hello from native code!");
} 
Run Code Online (Sandbox Code Playgroud)

我想添加一些修改,只是为了玩一下:

#include <algorithm>
Run Code Online (Sandbox Code Playgroud)

然后,在上面的函数中,我补充说:

int a;
a=std::min<int>(10, 5);
Run Code Online (Sandbox Code Playgroud)

但是编译器说它找不到文件'algorithm'并且min()不是std的一部分.

经过一番搜索,我发现android ndk有一个gnu-libstdc ++目录,里面有所有需要的std文件.阅读NDK文档,我已经了解到usint std ::*应该在不对代码进行任何修改的情况下工作(如果包含正确的头文件).但似乎gg on cygwin无法找到所需的文件.

为了能够在android ndk应用程序中的.cpp文件中使用std和stl,有哪些步骤?

c++ android std c++-standard-library android-ndk

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

Android NDK - 链接外部库的问题(找不到它)

我在cygwin下使用Android NDK r6b(系统正确更新).我正在修改hello-jni示例以学习使用NDK.因为我有一个用C++编写的库,我希望在hello-jni中使用(实际上,我创建了一个名为helloworld的prj,其中包含一个名为ndkfoo.cpp的.cpp文件),我在Eclipse中创建了一个新的Android项目(更新为Android),添加了一个jni目录,添加了一个Android.mk和Application.mk文件,编辑它们以编译.cpp.在编译结束时,我获得了一个.so文件.

现在,在helloworld Android.mk中,我需要进行一些编辑,以告诉链接器包含该库.假设库文件是libmylib.so,我有以下android.mk脚本:

LOCAL_PATH:= $(调用my-dir)

包括$(CLEAR_VARS)

LOCAL_MODULE:= ndkfoo

LOCAL_SRC_FILES:= ndkfoo.cpp

LOCAL_C_INCLUDES + = $(LOCAL_PATH)/ mylib

LOCAL_LDLIBS + = -L $(LOCAL_PATH)/../../ mylib/libs/armeabi/-lmylib

包含$(BUILD_SHARED_LIBRARY)

我的目录按以下方式组织:

d:/android/android-ndk-r6b => android ndk root
d:/android/workspace/helloworld => helloworld project
d:/android/workspace/mylib => mylib project library
Run Code Online (Sandbox Code Playgroud)

(因此,libmylib.so的路径是:d:/ android/workspace/mylib/libs/armeabi).

不幸的是,这似乎不起作用.如果我从ndkfoo.cpp 删除对mylib的每个引用,它甚至在我的手机上编译并运行.如果我不删除对mylib的引用,它会编译但不会链接:我得到以下结果:

D:/android/android-ndk-r6b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windo ws/bin /../ lib/gcc/arm-linux-androideabi/4.4.3 /../ ../../../arm-linux-androideabi/ bin/ld.exe:找不到-lmylib

PS.我忘了提到我在helloworld项目的jni目录下运行ndk-buld.PSS的.我在互联网上发现了很多类似的问题.我一直使用Visual C/C++ IDE,所以我对GCC,makefile等都很新...

abi linker-errors android-ndk

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