java 怎么链接ndk的库_使用ndk-build链接现有的静态库

我有一个库,我使用cmake和android-cmake为Android编译并获得一个静态库 .

然后我尝试使用这样的Android.mk文件将我的测试项目与这个静态库链接:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := test

LOCAL_SRC_FILES := ../test.cxx

LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../src

LOCAL_CFLAGS := -std=gnu++11 -D__ANDROID__

LOCAL_CPP_FEATURES += exceptions

LOCAL_LDLIBS += -L.. -ljson++

include $(BUILD_EXECUTABLE)

和Application.mk

NDK_TOOLCHAIN_VERSION = 4.7

APP_STL := gnustl_static

这里的json是我以前使用cmake构建的库的名称 .

链接期间失败

../libjson .a(object.cpp.o):object.cpp:function json :: error_json_object_invalid_type(void const *,json :: object_type,json :: object_type,char const *):error:undefined reference to' std :: basic_ostringstream,std :: allocator> :: ~basic_ostringstream()'../libjson .a(object.cpp.o):object.cpp:function json :: error_json_object_invalid_type(void const *,json :: object_type, json :: object_type,char const *):error:未定义引用'VTT for std :: basic_ostringstream,std :: allocator>'../libjson .a(object.cpp.o):object.cpp:function json: :error_json_object_invalid_type(void const *,json :: object_type,json :: object_type,char const *):error:未定义引用'vtable for std :: basic_ostringstream,std :: allocator>'../libjson .a(object . cpp.o):object.cpp:function json :: error_json_object_invalid_type(void const *,json :: object_type,json :: object_type,char const *):error:未定义引用'vtable for std :: basic_stringbuf,std :: allocator>'../libjson .a(object.cpp.o):object.cpp:func json :: error_json_object_no_such_key(void const *,void const *,unsigned int):error:未定义引用'std :: basic_ostringstream,std :: allocator> :: ~basic_ostringstream()'../libjson .a(object . cpp.o):object.cpp:function json :: error_json_object_no_such_key(void const *,void const *,unsigned int):error:undefined reference to'VTT for std :: basic_ostringstream,std :: allocator>'../libjson .a(object.cpp.o):object.cpp:function json :: error_json_object_no_such_key(void const *,void const *,unsigned int):error:未定义引用'vtable for std :: basic_ostringstream,std :: allocator> '../libjson .a(object.cpp.o):object.cpp:function json :: error_json_object_no_such_key(void const *,void const ,unsigned int):error:对std :: basic_stringbuf的'vtable的未定义引用, std :: allocator>'../libjson .a(object.cpp.o):object.cpp:function std :: basic_stringbuf,std :: allocator> :: ~basic_stringbuf():error:undefined reference to'vtable for std :: basic_stringbuf,std :: allocator>' collect2:错误:ld返回1退出状态make: [obj / local / armeabi / test]错误1

此错误是由libgnustl_static.a在-ljson之前调用编译器引起的:

/opt/android-ndk/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ -Wl,--gc-sections -Wl,-z,nocopyreloc --sysroot=/opt/android-ndk/platforms/android-3/arch-arm ./obj/local/armeabi/objs/test/__/test.o /opt/android-ndk/sources/cxx-stl/gnu-libstdc++/4.7/libs/armeabi/libgnustl_static.a -lgcc -no-canonical-prefixes -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -L/opt/android-ndk/platforms/android-3/arch-arm/usr/lib -L.. -ljson++ -lc -lm -o ./obj/local/armeabi/test

所以可以通过添加来解决

-L${ANDROID_NDK}/sources/cxx-stl/gnu-libstdc++/4.7/libs/armeabi-v7a/ -lgnustl_static

到LOCAL_LDLIBS

现在的问题是:如果它不属于我的项目并使用不同的构建系统编译,那么在现有静态库中链接的正确方法是什么?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值