NDK编译C++库,

折腾了一天, 终于把编译问题解决了。

之前使用JNI编译C语言是很随意就过了, 本以为C++也是一样轻松, 没想到上来就被打脸  抓狂

用#include <iostream>这个头文件, 提示文件不存在, 用find找了一下, 是存在的。后来我把.c改成了.cpp之后, 可以编译通过了。

但是原来的项目是C语言的, 还得想办法用C语言调用C++及C++的第三方库。

我就用C++封装几个C语言的接口。可 参见:C调用C++

当调用第三方的函数时, 又报了一大堆错误, 错误大致如下:error: undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::assign(char const*)'     

接着google吧。 在http://stackoverflow.com/questions/11665521/ndk-ndk-build-error 这个网址上参考了2楼及3楼。 

嗯, 有效果, 虽然还是没有通过, 但是编译的错误却变成了undefined reference to 'wcstombs'。

又找到了http://bbs.csdn.net/topics/390793521?page=1#post-398836843这个帖子。 错误一模一样, 仔细一看, 都是在用udx,偷笑

让我换64位的机器? 感觉不太靠谱, 接着试吧。

https://groups.google.com/forum/#!msg/android-opencv/MR0iKfsMWYA/rtq2h5Gh8IcJ (貌似得翻墙), 上面说平台的版本不够高。然后我把jni目录下的Application.mk文件, 改成了如下:

<pre name="code" class="cpp">APP_OPTIM := release
APP_PLATFORM := android-8
APP_STL := gnustl_static
APP_CPPFLAGS += -frtti
APP_CPPFLAGS += -fexceptions
APP_CPPFLAGS += -DANDROID
APP_ABI := armeabi-v7a
 

 

问题解决!

但是我怕指定APP_PLATFORM版本, 在其它android机器上会有影响, 所以去掉APP_PLATFORM试了一下, 嗯, 还是不行, 但去掉APP_ABI是可以的。 至此编译问题总算解决了。

Application.mk:

<pre name="code" class="cpp">APP_OPTIM := release
APP_PLATFORM := android-8
APP_STL := gnustl_static
APP_CPPFLAGS += -frtti
APP_CPPFLAGS += -fexceptions
APP_CPPFLAGS += -DANDROID
#APP_ABI := armeabi-v7a
 

Android.mk:

<pre name="code" class="cpp">LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := com_example_yan_HelloJNI
LOCAL_SRC_FILES := com_example_yan_HelloJNI.c \
    udx_c.cpp

LOCAL_JNI_SHARED_LIBRARIES :=libcom_example_yan_HelloJNI
#LOCAL_LDLIBS := -L/home/dyjun/test/android/jni -lffmpeg
LOCAL_LDLIBS := -L/home/dyjun/jni_udx_test/android/jni/lib/ -lStreamMediaLib -lfudx
LOCAL_WHOLE_STATIC_LIBRARIES := libgnustl_static

#LOCAL_LDLIBS := -L./jni/lib/ -lfudx -lStreamMediaLib

include $(BUILD_SHARED_LIBRARY)
 



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值