一个简单的问题(我使用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.
我需要使用boost序列化代码.我正在Android上测试它(显然使用NDK).在我决定是否真的想在我的项目中使用boost序列化代码之前,我想知道是否可以在iPhone应用程序中编译和使用boost.我问这个问题是因为在Android上编译提升并不是一件容易的事情,因此iPhone上的提升可能与Android(叹息)一样难以编译.谢谢.
enum的大小在不同的编译器(gcc,visual c和其他?)中总是相同的.也就是说,特定枚举的sizeof()是否为遵循C/C++标准的每个编译器提供相同的值?
我正在玩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,有哪些步骤?
我在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等都很新...