2014-09-25 75 views
0

我想编译库(静态的,而是也可以共享)用C++编写,以便它是静态包含了我在图书馆使用所有C++运行时功能,即另一个项目可以简单地包括我。一个或.so文件,而不必担心进一步的依赖关系。我如何使用NDK/Android构建系统来做到这一点?如何静态编译C++运行时到Android上的NDK/JNI库?

到目前为止,我有

APP_STL := c++_static 

在我Application.mk和设置项目后,在我的Android.mk生成使用

include $(BUILD_STATIC_LIBRARY) 

我的图书馆。但是,如果我然后在出现的库中取出到第二个项目(比方说,一个动态库)没有指定的STL(如纯C)我得到找不到符号链接错误的负载。只有当我指定在第二个项目中使用C++ _ static STL时,这些错误消失了,表明C++ _ static没有被拉入第一个库中。 (我知道这并不奇怪,但这不是我想要的行为)。

使用好醇” make文件,并指定建立自己的标志让我结合静态库。我的问题是哄骗NDK编译系统做,如果你静态编译C++运行时到库,遗憾的是另一个项目担心这种依赖性吧:)

回答

0

如果几个.so文件是使用静态C++运行时,由于共享运行时使用的全局变量,这可能导致损坏和崩溃。

如果编译一切(你的lib和最终项目)到一个单一的.so文件,你可以使用一个静态的C++运行时,如果最终项目内声明的IT更好呢。因为强制静态包含C++运行库在您的lib中会阻止使用C++运行库的最终项目。