mk文件中如何引入静态库,动态库,三方库

LOCAL_SHARED_LIBRARIES += 动态库

LOCAL_STATIC_LIBRARIES += 静态库

LOCAL_LDFLAGS := 静态动态都可以



LOCAL_SHARED_LIBRARIES和LOCAL_STATIC_LIBRARIES是引入系统的,LOCAL_LDFLAGS是引用第三方的。

其实如果我们在研究Android源码编译,然后下载了Android源码,使用mm或者mmm命令编译的话,其实LOCAL_SHARED_LIBRARIES,LOCAL_STATIC_LIBRARIES 这2个就够用了。

因为mm或者mmm命令,会把生成的so文件,或者是a文件会放在系统目录下。

以我自己这边为例子:

so文件放在:out/target/product/generic/obj/lib文件夹下

a文件放在 :out/target/product/generic/obj/STATIC_LIBRARIES 对应的文件夹下


所以 LOCAL_SHARED_LIBRARIES 其实对应的是out/target/product/generic/obj/lib

  LOCAL_STATIC_LIBRARIES 对应的是out/target/product/generic/obj/STATIC_LIBRARIES


在研究源码的时候 一般就不需要LOCAL_LDFLAGS 来引入自己写的测试的so或者a了,因为都会放在那2个文件夹下。

当然 如果确实需要引入其他人写的so文件,那就另当别论了。

LOCAL_LDFLAGS 如何使用呢 

LOCAL_LDFLAGS := -L(路径) -l(模块名)  这是动态的引入方法

LOCAL_LDFLAGS := (.a文件所在的全路径)  这是静态的引入方法

其实当当只用一个LOCAL_LDFLAGS 也可以,完全可以不用LOCAL_SHARED_LIBRARIES和LOCAL_STATIC_LIBRARIES。

甚至LOCAL_LDFLAGS的功能更强大,因为LOCAL_SHARED_LIBRARIES和LOCAL_STATIC_LIBRARIES只能引入2个文件夹下的库

LOCAL_LDFLAGS既可以引入任何库。


看下我的demo

引入动态库 LOCAL_LDFLAGS := -L./lib  -ltest

引入当前文件夹下的lib的test模块 


引入静态库LOCAL_LDFLAGS := $(LOCAL_PATH)/lib/libtest.a

引入当前lib文件夹下的libtest.a


以上都是引入三方库,


如何利用LOCAL_LDFLAGS 引入系统库呢

引入系统的动态库

LOCAL_LDFLAGS := -llog

引入系统的log库


引入下系统的静态库

LOCAL_LDFLAGS := out/target/product/generic/obj/STATIC_LIBRARIES/libtest_intermediates/libtest.a

引入静态库需要.a文件的全路径


引入系统的动态库使用LOCAL_LDFLAGS 倒也方便,使用LOCAL_LDFLAGS引入静态库倒是有点麻烦了,所以这里不推荐。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值