SO动态链接库文件的编译和使用,flutter极光推送

本文介绍了动态链接库(SO库)与静态链接库的区别,并详细讲解了如何在C语言中编译SO动态链接库。通过示例代码展示了创建和调用SO库的过程,强调了在编译时使用-fPIC和-shared选项的重要性。同时,文章还提及关注作者并加入群聊可获取相关源码解析和面试资料。

链接库分为 静态链接库 和 动态链接库。

静态链接库(a库):在 编译 的时候,库函数中函数的定义已经编译到源文件中,所以,静态链接库在编译完之后存不存在无关紧要。

动态链接库(so库):在 编译 的时候,库函数中函数的定义没有编译到源文件中,只是指定了库文件的路径,所以,编译之后源文件的执行还是依赖于so库文件。

静态链接库和动态链接库的区别在于,主程序在运行前,静态链接库的链接固定写入在程序中,而动态链接库则是在每次程序运行再加载链接。

如果对C语言编译 四步走 不熟悉的同学可以参考这篇文章 :微观的C/C++编译执行过程

在实际开发过程中,动态链接库用的居多,所以,我下面仅讲其的使用步骤:

代码示例

====

准备一个 .c 库函数文件

#include<stdio.h>

#include<stdlib.h>

int wust_test(int value){

printf("%d\n",value);

}

在这里我建议大家也写一个 .h 文件,也就是你这个库函数里面包含 函数的一个申明,这样函数的含义 和 用法便一目了然了。如下:

//功能:测试 so 动态链接库

//参数一:整型

int wust_test(int value);

将这个库函数编译成 so 动态链接库

gcc test.c -fPIC -shared -o libtest.so

gcc 依赖库文件 -fPIC -shared -o libxxx.so

libxxx.so 必须以 lib 开头 .so结尾

-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),

则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意

位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。

-shared 目的是使源码编译成动态库 .so 文件

这个时候 so动态链接库 就生成了,下面我们来看看调用

编写 main.c 文件

#include<stdio.h>

#include<stdlib.h>

int wust_test(int value);

int main(){

wust_test(33);

return 0;

}

最后送福利了,现在关注我并且加入群聊可以获取包含源码解析,自定义View,动画实现,架构分享等。
内容难度适中,篇幅精炼,每天只需花上十几分钟阅读即可。
大家可以跟我一起探讨,欢迎加群探讨,有flutter—底层开发—性能优化—移动架构—资深UI工程师 —NDK相关专业人员和视频教学资料,还有更多面试题等你来拿

点击GitHub领取
录播视频图.png

%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)**
[外链图片转存中…(img-r4IjKkXi-1646145209549)]

### 极光推送集成指南 在 Flutter 应用中集成极光推送功能,可以通过以下步骤实现。 #### 1. 添加依赖 首先,在项目的 `pubspec.yaml` 文件中添加极光推送插件的依赖。可以通过 Git 的方式来添加依赖: ```yaml dependencies: jpush_flutter: ^0.7.5 ``` 或者通过本地路径添加依赖: ```yaml dependencies: jpush_flutter: path: ../jpush-flutter-plugin ``` 确保将下载的插件源码解压并放置在正确目录下 [^1]。 #### 2. 导入包 在项目启动入口增加以下代码块: ```dart import 'package:flutter/material.dart'; import 'package:jpush_flutter/jpush_flutter.dart'; import 'index_page.dart'; void main() => runApp(RootApp()); class RootApp extends StatefulWidget { @override State<StatefulWidget> createState() { return RottAppState(); } } class RottAppState extends State<RootApp> { @override void initState() { super.initState(); JPush jpush = new JPush(); jpush.setup( appKey: "替换成你自己的 appKey", channel: "theChannel", production: false, debug: true, ); } @override Widget build(BuildContext context) { return MaterialApp( home: IndexPage(), ); } } ``` 这段代码展示了如何在应用启动时配置极光推送 [^4]。 #### 3. 配置 Android 项目 对于 Android 项目,需要进行一些额外的配置。具体步骤可以参考官方文档中的客户端集成插件部分 [^2]。 #### 4. 版本记录使用方法 版本记录使用方法可以在 [极光推送 Flutter 插件页面](https://pub.flutter-io.cn/packages/jpush_flutter/install) 上找到 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值