基于linux的嵌入式应用工具类库源码分享,常用模块都有
ahcoder 2025-06-09 19:44 2 浏览
Embedme项目简介
Embedme是一个基于linux的嵌入式应用工具类库,包括线程,线程池,Coroutine,定时器,消息队列,socket,Tuple,文件,目录,内存池,串口,CANSocket等嵌入式开发中常用的模块。Embedme集成了cJSON、sqlite、tinyxml、libconfig++、yaml-cpp、libev等优秀的开源库。它可以帮助您快速的构建稳定的嵌入式应用程序,省得广大码农重复造轮子(当然,上班改造还得造,只不过有了它,您就可以造给老板看了)。
编译系统mbuild system
本工程采用自行编写的mbuild系统进行编译,mbuild系统的使用请参考:mbuild编译系统说明。
目录树结构
- app: 应用程序源代码存放目录.
- build: mbuild编译系统目录.
- example: 工程示例源码目录.
- doc: 用户手册.
- openlibs: 目录用于放置移植好的外部库.
- opensource/libemb: libemb库源码,此文件夹内的代码不依赖第三方开源库.
- opensource/libembx: libembx库源码,此文件夹内的代码会依赖第三方开源库.
- tools: 嵌入式常用工具.
编译说明
在编译前请先确认已安装autoconf、automake、libtool等工具,否则无法编译成功,如遇编译错误,请自行查看错误提示,判断是否是工具未安装。
1 . cd到工程跟目录下
$cd embedme
2 . 设置mbuild编译环境
$source build/envsetup.sh
3 . 设置编译目标体系
$mbuild_setup
4 . 编译
$mbuild_make opensource/libemb libemb
$mbuild_make example/libemb.test test
$mbuild_make app/demo demo
备注:本工程支持cygwin/Android环境下编译,源码中使用OS_CYGWIN/OS_ANDROID宏来隔离代码,如果不使用宏将默认代码同时支持在Linux、cygwin、Android环境下编译。
mbuild编译系统说明
build目录是mbuild编译系统的源码,build/envsetup.sh是编译环境设置脚本。在使用mbuild系统前,必须在工程根目录下执行:
$source ./build/envsetup
执行完成后将可使用mbuild系统提供的系列命令mbuild_xxx。
命令说明
$mbuild_setup #编译环境设置(默认为x86配置,如果需要交叉编译,可以修改profile.sh文件,或选择msetup菜单中的specify by myself选项设置)
$mbuild_make <directory> <target> <linktype> #编译directory目录下的target目标
$mbuild_clean <directory> <target> #清理directory目录下的target目标
$mbuild_remake <directory> <target> <linktype> # 重新编译directory目录下的target目标
$mbuild_project <directory> <target> [exec|lib|qt|res|fromsrc|fromtar] #在directory目录下创建target目标的子工程
$mbuild_auto #自动编译(调用自动编译脚本:autobuild.sh)
使用mbuild命令必须指定两个参数<directory> <target>
- <directory> 源码目录
- <target> 源码目录下的目标名称,用户需编写对应的目标构建文件<target>.mk
- <linktype> 指定编译链接库的类型,static或者shared
目标构建文件target.mk说明
mbuild系统支持构建以下几种目标
- 可执行文件(BUILD_EXECUTABLE)
- 链接库(BUILD_LIBRARY)
- QT项目(BUILD_QTPROJECT)
- 资源文件(BUILD_RESOURCE)
- 从源码tar包编译(BUILD_FROMTAR)
- 从源码编译(BUILD_FROMSRC)
注意:每个target.mk文件仅支持编译一个目标,每个目标需对应一个mk文件。
target.mk模板1(编译目标)
# this file is generated by mbuild_project from mbuild system, see more in build/README.md
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# module name
LOCAL_MODULE :=
# c compile flags
LOCAL_CFLAGS :=
# cpp compile flags
LOCAL_CXXFLAGS :=
# include file list
LOCAL_INC_PATHS := \
$(LOCAL_PATH)
# source file list
LOCAL_SRC_FILES := \
# lib type : static or shared
LOCAL_LIB_TYPE :=
LOCAL_PRE_BUILD :=
LOCAL_POST_BUILD :=
include $(BUILD_LIBRARY)
target.mk模板2(部署文件)
# this file is generated by mbuild_project from mbuild system, see more in build/README.md
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# module name
LOCAL_MODULE :=
# resource file list
LOCAL_RESOURCE_FILES:=
# destination path
LOCAL_RESOURCE_DEST :=
include $(BUILD_RESOURCE)
常用变量说明
LOCAL_PATH #当前源码目录,固定写为LOCAL_PATH := $(call my-dir)
CLEAR_VARS #清除编译变量
LOCAL_CFLAGS #编译参数CFLAGS
LOCAL_LDFLAGS #链接参数LDFLAGS
LOCAL_INC_PATHS #头文件搜索路径
LOCAL_LIB_PATHS #链接库搜索路径
LOCAL_LIB_TYPE #目标库的类型:static或者shared
LOCAL_MODULE #模块名称,最终生成的目标名称
LOCAL_PRE_BUILD #编译前执行的脚本
LOCAL_POST_BUILD #编译后执行的脚本
GCC #指定c编译器,如果不指定,则由mbuild系统确定编译器
CC #指定c++编译器,如果不指定,则由mbuild系统确定编译器
AR #指定链接器,如果不指定,则由mbuild系统确定链接器
工程样例
假定在工程目录下有hello目录,目录下有源码hello.h,hello.c,main.c。我们的目标是生成一个libhello.a和一个可执行程序hello. 1 . 设置编译环境:
$source ./build/envsetup.sh
$mbuild_setup
2 . 在hello目录下新建libhello.a目标的构建文件libhello.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libhello
LOCAL_CFLAGS :=
LOCAL_CXXFLAGS :=
LOCAL_LDFLAGS :=
LOCAL_LIB_PATHS :=
LOCAL_INC_PATHS := $(LOCAL_PATH)
LOCAL_SRC_FILES := hello.c
LOCAL_LIB_TYPE := static
LOCAL_PRE_BUILD:=
LOCAL_POST_BUILD:=
include $(BUILD_LIBRARY)
也可以使用mbuild_project命令自动创建mk文件:
mbuild_project hello libhello lib
3 . 在hello目录下新建hello目标的构建文件hello.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_CFLAGS :=
LOCAL_LDFLAGS := -lpthread
LOCAL_INC_PATHS := $(LOCAL_PATH)
LOCAL_SRC_FILES := main.cpp hello.c
LOCAL_PRE_BUILD:=
LOCAL_POST_BUILD:=
include $(BUILD_EXECUTABLE)
也可以使用mbuild_project命令自动创建mk文件:
mbuild_project hello hello exec
4 . 编译目标:
$mbuild_make hello libhello static
$mbuild_make hello hello
5 . 在output目录的lib和bin文件夹下你将发现编译出的目标文件:
$ls output-x86_64/bin
hello
$ls output-x86_64/lib
libhello.a
注意事项
作者说的:本软件遵循LGPL协议,请自觉遵守该协议,您使用本软件所引起的任何法律后果本人不承担任何责任! 如果您使用此源码,请务必保留README在您的工程代码目录下!
话不多说,三连后私(iot)
相关推荐
- Linux 5.17网络子系统方面的变化相当令人兴奋
-
正在开发的5.17内核的Linux网络子系统的更新是相当令人兴奋的,因为Linux在云中的大型服务器和企业网络设备上的运行以及小型物联网硬件上的Linux都是如此多产。新版不仅像往常一样有大量的硬件驱...
- 12 个流行的 Linux 网络命令及其使用方法
-
在Linux系统中,网络管理是系统管理员和开发者的核心技能之一。无论是排查网络问题、监控流量,还是配置网络接口,Linux提供了众多强大的命令行工具。这些工具功能强大且灵活,能够帮助用户高效地完成网络...
- Linux集群自动化监控系统Zabbix集群搭建到实战
-
自动化监控系统Cacti特点:将监控到的数据,绘制成各种图形基于SNMP协议(网络管理协议)的监控软件,强大的绘图能力Nagios特点:状态检查和报警机制(例如:内存不足或CPU负载高时,及时的...
- Linux超简单入门开箱篇(linux怎么入门)
-
此篇文章主要会带你介绍Linux操作系统,包括Linux本身、Linux如何使用、以及系统调用和Linux是如何工作的。Linux简介UNIX是一个交互式系统,用于同时处理多进程和多...
- 新手教程,Linux系统下MySQL的安装
-
看了两三个教程。终于在哔哩哔哩找到一个简单高效的教程,成功安装,up主名叫bili逍遥bili,感兴趣可以去看看。下面这个是我总结的安装方法环境:CentOS764位1.下载安装包,个人觉得在...
- Windows 11 + WSL2 打造轻量级 Linux 本地开发环境实战教程
-
一、前言在2025年,越来越多开发者希望在不安装双系统的前提下体验Linux开发的强大能力,而微软的WSL2(WindowsSubsystemforLinux2)正好提供了这一可能。...
- linux系统奔溃之vmcore:kdump 的亲密战友 crash
-
转自https://blog.csdn.net/yuanfang_way/article/details/77987399crash是目前广泛使用的linux内核崩溃转储文件的分析工具,掌握c...
- 音视频开发为什么要学SRS流媒体服务器
-
1SRS是什么官方定义:SRS是一个流媒体集群,支持RTMP/HLS/HTTP-FLV/RTSP/DASH/WebRTC/SRT/GB28181,高效、稳定、易用,简单而快乐。2SRS能够解决什么...
- 77% 的 Linux 运维都不懂的内核问题,这篇全告诉你了
-
前言之前在实习时,听了OOM的分享之后,就对Linux内核内存管理充满兴趣,但是这块知识非常庞大,没有一定积累,不敢写下,担心误人子弟,所以经过一个一段时间的积累,对内核内存有一定了解之后,今...
- Linux 上利用Nginx代理uWSGI处理Flask web应用
-
一、介绍最近开发要用一个测试环境,是这样的Nginx+uwsgi+flask的一个结构。下面是一些记录,在Centos系统上使用Flask架构部署一个简单的Python应用。然后使用Nginx作...
- C++ TinyWebserver 部署到Linux下,并运行
-
C++TinyWebserver部署到Linux下,并运行(使用的是Vmware的虚拟机运行Ubuntu20.04)环境:Vmware+Ubuntu20.041.Tinywebserver项目...
- SUSE Linux方案已在Amazon Web Services发布
-
近日,SUSE宣布已在亚马逊云服务(AWS)上发布SUSELinuxEnterpriseServerforSAPApplications。通过SUSE的“bring-your-own-s...
- 遨游于Linux的“老鸟想要一份学习pdf:鸟哥的Linux私房菜学习篇
-
您是准备学习Linux的“小菜鸟”,却不知道该如何下手?您是遨游于Linux的“老鸟想要一本案头必备的工具书?《鸟哥的Linux私房菜基础学习篇(第四版)》是您绝佳的选择!全新改版,提供您更新的技术...
- Mdserver-web|一款简单Linux面板服务
-
可以说是宝塔面板的精简版,界面很相似,只是更加简洁些,没有那么臃肿官网:https://www.midoks.icu/项目开源地址:https://github.com/midoks/mdserver...
- 国内外比较知名常见的6个可视化WEB管理面板
-
Linux服务器的管理对于新手用户来说是一个挺头疼的问题,由于用作服务器的Linux主机通常都没有图形化界面(节省资源),与日常使用的Windows有着很大的差别,一些必备组件的安装或更新就...
- 一周热门
- 最近发表
- 标签列表
-
- linux 远程 (37)
- u盘 linux (32)
- linux 登录 (34)
- linux 路径 (33)
- linux 文件命令 (35)
- linux 是什么 (35)
- linux 界面 (34)
- 查看文件 linux (35)
- linux 语言 (33)
- linux代码 (32)
- linux 查看命令 (33)
- 关闭linux (34)
- root linux (33)
- 删除文件 linux (35)
- linux 主机 (34)
- linux与 (33)
- linux 函数 (35)
- linux .ssh (35)
- cpu linux (35)
- 查看linux 系统 (32)
- linux 防火墙 (33)
- linux 手机 (32)
- linux 镜像 (34)
- linux ip地址 (34)
- linux 用户查看 (33)