2.0 库函数的构建

在结构体程序中的字节对齐情况下读取字符长度的方法,其程序如下:

如图所示在程序中有char、int、short三种类型:程序在读取时是按照四字节对齐的方式读取的(即每四个字节读一次),在程序中计算机会先读取char型,读取的长度为2个字节,由于int所占用的是4个字节,所以在读取int时计算机会自动选择4的倍数进行读取,即会在读取char的2个字节后会在空出两个字节,然后再读取int的4个字节,这时计算机读取了8个字节,然后计算机会再读取short的2个字节,再紧接着读取char的1个字节,又因为计算机是按照四字节对齐进行读取长度的,所以它会在char后自动空出1个长度,所以此时计算机读取的长度为12。即程序的运行结果为:length=12。

静态库的编译:

ar   -rs  libmy_math.a   *.o

这段指令的含义为:将所有的.o文件打包成libmy_math.a(静态库),my_math为静态库的库名。

ar    -t libmy_math.a

这段指令的含义为:将.o文件打包到静态库内。

gcc   file.c(写主函数的文件)  -L.  –lmy_math -o  file

这段指令的含义为:将file.c文件编译成可执行文件file。其中的L.表示后面跟的是路径,即仓库的位置。

动态库的编译:

gcc  -Fpic  *.c

这段指令的含义为:将所有的.c文件汇编成.o文件。

gcc  -shared -o  lib_math.so  *.o

这段指令的含义为:将.o文件汇编成动态库lib_math.so(动态库)。

Ldd  file                  表示查看链接。

export  LD_LIBRARY_PATH=$LD_LIBARY_PATH:.

这段指令的含义表示为:当运行加载时找到当前路径下的动态库。

echo  $LD_LIBARAY

这段指令的含义为:查看程序有没有配置过路径,如有会显示(:.)。

动态库的更新:

一、    先把.h文件移动到/usr/include下

二、    把原有动态库移动到/usr/lib下

三、改变定义里面的文件

四、先用gcc  -fPIC     -c  *.c编译成.o文件

五、再用gcc -shared  -o  libmy_math.so *.o编译后会生成my_math.so(动态库)。

六、把动态库移动到/usr/lib下,将原来的动态库覆盖。

七、用gcc file.c  -lmy_math  -o file进行编译。

七、利用./file(可执行文件)查看。

注:动态库的更新,只是更改的是定义里的东西,所以动态库的框架是不动的。

2.0 库函数的构建

时间: 2024-10-12 21:00:04

2.0 库函数的构建的相关文章

Cocos2d-x 3.0 - Eclipse上构建一个Android项目

Cocos2d-x 3.0 - Eclipse上构建一个Android项目 2014年4月30日 4月末 本篇继续介绍Cocos2d-x 3.0的一些基础内容,前面一篇博客介绍了如何在Visual Studio 2012上编译我们的Cocos2d-x项目,也成功把Helloworld运行起来了.跟以往的版本是类似的,只不过创建空项目的时候命令变成了cocos.本篇博客带给大家的是,如何在Eclipse运行起我们的Cocos2d-x项目,如果童鞋们有看我写的Cocos2d-x 2.2.3版本的交叉

从0到1构建大数据生态系列1:数据蛮荒中的拓荒之举

缘起 我们都知道,当前大数据的需求基本属于遍地开花.无论是帝都.魔都,还是广州.深圳,亦或是全国其他各地,都在搞大数据:不管是不到百人的微小公司,还是几百上千人的中型公司,亦或是上万的大型公司,都在需求数据岗位. 大公司暂且不论,他们一切都走在前头.那么,对于中小型企业来说,开始尝试以数据的思维去思考问题,开始涉足大数据领域,这就是一个从0到1的过程了. 有(bu)幸(xing),近半年来,我亲自见证以及亲身体会到了这个过程,或者至今仍然在完善1这个过程中.期间,有痛苦有坑.有喜悦有成功.有沉静

SpringBoot2.0+SpringCloud Eureka构建服务治理

最近发现SpringCloud构建微服务架构中,网上很多只是用到了SpringBoot2.x之前的版本,显然使用SpringBoot2.x之后构建,网上的资料会给初学者带来很多不方便,而且没有多大的参考价值,所以,这里将使用SpringBoot2.0.0版本,构建SpringCloud Eureka服务治理. 服务治理分了两部分:注册中心和服务提供者 工具环境:IntelliJ IDEA 一.搭建注册中心 1.打开IDEA,File->new->Project->maven... 如上图

Gradle3.0自动化项目构建技术精讲+实战

第1章 课程介绍本章主要向大家介绍本课程的整体规划,包括课程收获,适合人群,课程章节安排等,通过本章的学习,可以让大家对课程有一个整体认知. 第2章 gradle快速入门本章会从整体上讲解一下gradle相关概念,让大家明白groovy与gradle, DSL的关系,以及清楚gradle的语法采用的就是groovy的核心语法,避免后面的学习出现概念上的疑惑. 第3章 开发环境搭建本章主要带领大家完成开发环境搭建,包括环境变量配置以及开发环境搭建,为我们后续的开发打下坚实的基础. 第4章 Grad

SpringBoot开发案例从0到1构建分布式秒杀系统

前言 最近,被推送了不少秒杀架构的文章,忙里偷闲自己也总结了一下互联网平台秒杀架构设计,当然也借鉴了不少同学的思路.俗话说,脱离案例讲架构都是耍流氓,最终使用SpringBoot模拟实现了部分秒杀场景,同时跟大家分享交流一下. 秒杀场景 秒杀场景无非就是多个用户在同时抢购一件或者多件商品,专用词汇就是所谓的高并发.现实中经常被大家喜闻乐见的场景,一群大妈抢购打折鸡蛋的画面一定不会陌生,如此场面让服务员大姐很无奈,赶上不要钱了. 业务特点 瞬间高并发.电脑旁边的小哥哥.小姐姐们如超市哄抢的大妈一般

Spark 1.0 开发环境构建:maven/sbt/idea

因为我原来对maven和sbt都不熟悉,因此使用两种方法都编译了一下.下面记录一下编译时候遇到的问题.然后介绍一下如果使用IntelliJ IDEA 13.1构建开发环境. 首先准备java环境和scala环境: 1. jdk 1.7 2. scala 2.11.1 1. maven 首先安装maven,我安装的是3.2.3, 可以直接下载binary.解压即可用.需要设置一下环境变量: export MAVEN_HOME=/project/spark_maven/spark/apache-ma

vue.js2.0的独立构建和运行时构建

转自:https://jingsam.github.io/2016/10/23/standalone-vs-runtime-only-build-in-vuejs2.html?utm_source=tuicool&utm_medium=referral 在使用 Vue.js 2.0 时,有独立构建(standalone)和运行时构建(runtime-only)两种版本可供选择.而在 Vue.js 1.0 中,却没有这种版本区别.到底该使用哪一个版本?这让我有点懵逼的感觉.本着知其然还要知其所以然

从0开始,构建前后端分离应用

最近业余时间比较充足,想开发一个小系统.作为自己的技术积累 后端使用Spring+SpringMVC+Mybatis框架.前端使用Vue+iView作为基础开发一个前后端分离的SPA应用 目录 1.环境搭建 1.1 Maven+Nexus搭建后台构建环境 1.2 webpack搭建后端构建环境 2.前端开发 3.后端开发 环境简介 由于是个人练习的小项目,因此开发环境设计也很简单.物理环境包括一台dbServer.一台配置服务器.一台应用服务器 服务器名称  服务器IP  操作系统  部署内容

Mongodb4.0副本集构建

目前最新的mongodb4.0.2已经支持事务这个重要特性,需要使用的话必须是复制或副本集,这是第一篇先研发如何构建副本集,因为副本集是目前最低成本的高可用群集方式. 1.准备三台服务器,本次使用是的ubuntu16.04.分别在三台服务器执行如下安装指定,参考官方安装连接:https://docs.mongodb.com/master/tutorial/install-mongodb-on-ubuntu/?_ga=2.66639470.1117419885.1536141422-1139377