Android NDK 编译C、C++混合程序小结(1)
来源:互联网 发布:mac safari收藏网页 编辑:程序博客网 时间:2024/05/29 10:38
1.C++中如果要使用STL的东西,如string.queue等等,需要在Application.mk文件中添加
- APP_CFLAGS += -fexceptions
- APP_STL := gnustl_static
另外, 由于我的应用程序还需要用到 libiconv.a这个库, 但是android并没有这方面的支持, 所以我下载了libiconv的源码来通过NDK编译。
编译libiconv的 Android.mk文件内容如下:
- LOCAL_PATH:= $(call my-dir)
- # first lib, which will be built statically
- include $(CLEAR_VARS)
- LOCAL_MODULE := iconv
- LOCAL_SRC_FILES := libcharset/lib/localcharset.c lib/iconv.c lib/relocatable.c
- LOCAL_C_INCLUDES := include lib libcharset/include
- LOCAL_CFLAGS := -Wno-multichar -D_ANDROID -DLIBDIR="c" -DBUILDING_LIBICONV -DIN_LIBRARY
- #LOCAL_PRELINK_MODULE := false
- include $(BUILD_STATIC_LIBRARY)
编译libiconv的Application.mk文件内容如下:
- APP_MODULES := libiconv
android本身支持的c++无异常处理、RTTI,c++标准库等。
不过有人定制了一个NDK,全支持这些了。
为什么会出现如:error: undefined reference to '__cxa_end_cleanup' 的链接错误。Android上用stlport时。因为没有链接到libstdc++.a。所以出错。
因为用到了一些静态库, 所以必须要链接完整的libstdc++.a。可以在
http://crystax.net/android/ndk.php这里下载的包里
sources\cxx-stl\gnu-libstdc++\libs\armeabi目录中找到。
Android上本身的libstdc++支持有限,所以必须链接到一个完整的libstdc++.a才行。
在Android.mk文件中加入
LOCAL_LDFLAGS = $(LOCAL_PATH)/libs/libcurl.a \
$(LOCAL_PATH)/libs/libstdc++.a
以及LOCAL_CPPFLAGS += -lstdc++ -fexceptions就可以编译通过了。
2. .c文件不可以包含stl有关的头文件,例如queue,string。所以一些公用的头文件,要区分是在.c中调用还是z在.cpp中调用。
0 0
- Android NDK 编译C、C++混合程序小结(1)
- Android NDK编译C/C++小结
- ubuntu android交叉编译c程序 ndk
- Android NDK编译纯C程序
- android ndk c编译
- ndk编译c可执行程序
- NDK编译C可执行程序
- Android NDK编译带STL的 C/C++ 程序
- Android NDK编译带STL的 C/C++ 程序
- ndk编译android上运行的c程序
- NDK编译Android上运行的C可执行程序
- Android NDK编译带STL的 C/C++ 程序
- ndk编译c可执行程序(jni 入门)
- ndk编译c可执行程序(jni 入门)
- ndk编译c可执行程序(jni 入门)
- ANDROID NDK实践开发系列--(01) 使用ndk编译c可执行程序
- C程序小结1
- Android 非NDK方式编译C文件
- 关于“Static storage paths aren't available from AID_SYSTEM”
- 将一个字符串中的空格全部替换为“%20”
- 关于eclipse jar导入以及Android的excel的使用(小白)
- HTTPS-Linux服务器Nginx配置、Android客户端证书生成
- ubuntu下安装 Source insight
- Android NDK 编译C、C++混合程序小结(1)
- ios 对plist文件的修改
- 初始化方法
- 条款16:成对使用new和delete时要采取相同形式
- Web.xml配置<taglib>标签报错问题(cvc-complex-type.2.4.a: Invalid content was found starting with element 'tag
- ubuntu 设置root密码
- CareerCup chapter 1 Arrays and Strings
- Activity四种启动模式
- 带分数(蓝桥)