android.mk+第三方,如何在Android.mk中包含静态第三方库?

我想在使用Android.mk的静态库中链接,但出现以下错误。如何在Android.mk中包含静态第三方库?

/home/pep/tools/crystax-ndk-10.3.2/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-g++ -Wl,--gc-sections -Wl,-z,nocopyreloc --sysroot=/home/pep/tools/crystax-ndk-10.3.2/platforms/android-21/arch-arm -Wl,-rpath-link=/home/pep/tools/crystax-ndk-10.3.2/platforms/android-21/arch-arm/usr/lib -Wl,-rpath-link=/home/pep/workspace/elm/src/agents/viga/obj/local/armeabi-v7a /home/pep/workspace/elm/src/agents/viga/obj/local/armeabi-v7a/objs/van/main.o -lgcc /home/pep/workspace/elm/src/agents/viga/obj/local/armeabi-v7a/libecom.so /home/pep/workspace/elm/src/agents/viga/obj/local/armeabi-v7a/libgnustl_shared.so -no-canonical-prefixes -march=armv7-a -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -fPIE -pie -mthumb -L/home/pep/tools/ros-android-ndk/roscpp_android/output/roscpp_android_ndk/lib /home/pep/tools/crystax-ndk-10.3.2/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libsupc++.a -L/home/pep/tools/crystax-ndk-10.3.2/sources/crystax/empty /home/pep/tools/crystax-ndk-10.3.2/sources/crystax/libs/armeabi-v7a/thumb/libcrystax.so -lc -o /home/pep/workspace/elm/src/agents/viga/obj/local/armeabi-v7a/van

/home/pep/workspace/elm/src/agents/viga/jni/main.cpp:34: error: undefined reference to 'ros::init(int&, char**, std::string const&, unsigned int)'

collect2: error: ld returned 1 exit status

这样看来,该库是不被链接中,没有-l,但据我所知,这是被包括正确使用LOCAL_STATIC_LIBRARIES。我试过将它列为libroscpp以及-lroscpp。这是Android.mk。

LOCAL_PATH := $(call my-dir)

MY_ELM_HOME := /home/pep/workspace/elm/src

MY_ELM_INCL := /home/pep/workspace/elm/src/includes

MY_ROS_HOME := /home/pep/tools/ros-android-ndk/roscpp_android/output/roscpp_android_ndk

MY_COMMONS_INCL := $(MY_ELM_HOME)/includes/commons

MY_COMMONS_LIBS := $(MY_ELM_HOME)/libs/commons/libs/armeabi-v7a

MY_ROS_INCL := $(MY_ROS_HOME)/include

MY_ROS_LIBS := $(MY_ROS_HOME)/lib

include $(CLEAR_VARS)

LOCAL_MODULE := mycom

LOCAL_SRC_FILES := $(MY_COMMONS_LIBS)/libecom.so

include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := van

LOCAL_C_INCLUDES := $(MY_ELM_INCL)

LOCAL_C_INCLUDES += $(MY_ROS_INCL)

LOCAL_SRC_FILES := main.cpp

LOCAL_CPPFLAGS := -std=gnu++14

LOCAL_CPP_FEATURES := rtti exceptions

LOCAL_LDLIBS := -L$(MY_ROS_LIBS)

LOCAL_SHARED_LIBRARIES := mycom

LOCAL_STATIC_LIBRARIES := libroscpp

LOCAL_STATIC_LIBRARIES += libroscpp_serialization

LOCAL_STATIC_LIBRARIES += librosconsole

include $(BUILD_EXECUTABLE)

$(call import-module,boost/1.59.0)

我使用-lroscpp与LOCAL_LDLIBS试过,但我得到一个错误,将讯息传送说使用LOCAL_STATIC_LIBRARIES。我确定这个路径对于静态库是正确的。

这里是libroscpp.a中的符号。

$ nm -Ca ./libroscpp.a | grep "ros::init"

...

00000001 T ros::init(int&, char**, std::string const&, unsigned int)

...

我也尝试重新排序库,但无济于事。

想法?

2016-08-30

Ender

+1

为包括静态库(* .a)有是一个PREBUILD_STATIC_LIBRARY,它与共享的一样使用,那就是你需要使用像libecom.so –

+0

这样的模块。如果你想做出答案,我会标记它。 –

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值