opencv – 如何在同一个Android.mk中编译两个不同的库,将其中一个链接到另一个

opencv – 如何在同一个Android.mk中编译两个不同的库,将其中一个链接到另一个,第1张

概述我有2个不同库的源代码,FooMain和FooSecondary. FooSecond由FooMain使用,因此,makefile必须编译First FooSecondary,然后编译FooMain,然后将FooSecondary链接到FooMain. 我的Android.mk是: LOCAL_PATH:= $(call my-dir)# Foo Secondary lib:# Cle 我有2个不同库的源代码,FooMain和FooSecondary. FooSecond由FooMain使用,因此,makefile必须编译First FooSecondary,然后编译FooMain,然后将FooSecondary链接到FooMain.

我的Android.mk是:

LOCAL_PATH:= $(call my-dir)# Foo Secondary lib:# Clear varsinclude $(CLEAR_VARS)# Target BuildLOCAL_ARM_MODE := arm   # library name          LOCAL_MODulE := FooSecondary        # Set All SRC_fileS Together            SRC_fileS := $(wildcard $(LOCAL_PATH)/FooSecondary/src/*.c)SRC_fileS := $(SRC_fileS:$(LOCAL_PATH)/%=%)     LOCAL_SRC_fileS = $(SRC_fileS)# Enable Log supportLOCAL_LDliBS = -llog    # C   Flags - Max optimization              LOCAL_CFLAGS := -O3 -mno-thumb# C++ Flags - Max optimization          LOCAL_CPPFLAGS := -O3 -mno-thumb# Compile as Shared library     include $(BUILD_SHARED_liBRARY)     # Foo Secondary lib:# Clear varsinclude $(CLEAR_VARS)# Include OpenCVinclude 3rdparty/OpenCV-2.4.3-rc-androID-sdk/sdk/native/jnI/OpenCV.mk# Target BuildLOCAL_ARM_MODE := arm   # library name          LOCAL_MODulE := FooMain     # Set All SRC_fileS Together            SRC_fileS := $(wildcard $(LOCAL_PATH)/FooMain/src/*.cpp)SRC_fileS := $(SRC_fileS:$(LOCAL_PATH)/%=%)     LOCAL_SRC_fileS = $(SRC_fileS)LOCAL_SHARED_liBRARIES := libFooSecondaryLOCAL_LDliBS := -L$(LOCAL_PATH)/../libs/armeabi LOCAL_LDliBS += -lz -lm -ldl -lGLESv2 -lEGL -llog -lFooSecondaryLOCAL_CFLAGS := -O2 -mno-thumb -Wno-write-stringsLOCAL_CPPFLAGS := -O2 -mno-thumb -Wno-write-strings# Compile as Shared library     include $(BUILD_SHARED_liBRARY) 

我的Application.mk是:

APP_CPPFLAGS := -frtti -fexceptionsAPP_STL := gnustl_staticAPP_ABI := armeabi-v7a

但是,当我使用ndk-build编译AndroID.mk时,我得到下一个错误:

Compile arm    : libFooSecondary <= *.cSharedlibrary  : libFooSecondary.soInstall        : libFooSecondary.so => libs/armeabi-v7a/libFooSecondary.soSharedlibrary  : libFooMain.so/home/user/androID-ndk-r8/toolchains/arm-linux-androIDeabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androIDeabi/4.4.3/../../../../arm-linux-androIDeabi/bin/ld: cannot find -lFooSecondarycollect2: ld returned 1 exit statusmake: *** [obj/local/armeabi-v7a/libFooMain.so] Error 1

如果正确编译和安装,为什么找不到libFooSecondary.so?

另外,如果LOCAL_MODulE名称改变,例如,第一个是LOCAL_MODulE:= zname,第二个是LOCAL_MODulE:= aname,先编译第二个,我不知道为什么.

解决方法 你的AndroID.mk看起来很怪异.它在某处分配了LOCAL_PATH吗?没有必要将LOCAL_CPPFLAGS分配给复制LOCAL_CFLAGS,因为ndk-build将两组标志放在C命令行上.

要更好地了解NDK如何解释您的Application.mk和AndroID.mk,您可以运行

ndk-build V=1

这将回显所有已执行的命令,包括编译和链接,以及NDK构建所分配的所有参数.

总结

以上是内存溢出为你收集整理的opencv – 如何在同一个Android.mk中编译两个不同的库,将其中一个链接到另一个全部内容,希望文章能够帮你解决opencv – 如何在同一个Android.mk中编译两个不同的库,将其中一个链接到另一个所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1129813.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存