当前位置: 首页 > wzjs >正文

网站项目报价单模板免费下载Python视频直播网站开发

网站项目报价单模板免费下载,Python视频直播网站开发,网站建设属于什么行业分类,钓鱼网站二维码制作软件文章目录 前提小知识生成和使用.a库操作步骤 在应用程序中,有一些公共的代码需要反复使用的,可以把这些代码制作成“库文件”;在链接的步骤中,可以让链接器在“库文件”提取到我们需要使用到的代码,复制到生成的可执行…

文章目录

  • 前提小知识
  • 生成和使用.a库操作步骤

在应用程序中,有一些公共的代码需要反复使用的,可以把这些代码制作成“库文件”;在链接的步骤中,可以让链接器在“库文件”提取到我们需要使用到的代码,复制到生成的可执行文件中。

在使用到库文件的代码时候,需要库文件代码的头文件。并且在我们使用到库文件代码的应用程序源代码中,包含这些库文件代码的头文件

前提小知识

  • 代码编译的过程:
    我们C源文件是如何生成可执行文件的:
    C源文件 -> 预处理 -> 编译 -> 汇编 -> 链接 -> 可执行文件。
    在这里插入图片描述
  • .代码行一开始就包含h文件的作用
    参考文章:.h文件的作用
      在C语言中,如果在第一行定义了一个变量/函数,在第二行可以使用这个变量/函数;而如果在第二行定义了一个变量/函数,在第一行想使用这个变量/函数,则会找不到这个变量/函数。
      代码行一开始就包含.h头文件的其中一个作用是:
      把一些变量/函数的声明在前面的行中,即使这些变量/函数的定义实现在 使用到这些变量/函数的语句的后面,这语句也能通过变量/函数的声明去找到变量/函数的定义实现
 1 /*test1.c*/2 void main(void)3 {4   prtstr(); 5 }6 7 void prtstr(void)8 {9   printf("Hello World!\n"); 
10 }test1.c 编译失败→_→。
prtstr()这个函数来说,他没有单独的声明,只有定义,那么 就从他定义的行开始,到文件结束 可以被使用。
main()函数的引用点上,prtstr()还没有起作用,所以会编译出错。1 /*test1.c*/2 void prtstr(void);3 void main(void)4 {5   prtstr(); 6 }7 8 void prtstr(void)9 {
10   printf("Hello World!\n"); 
11 }test1.c 编译成功。
prtstr()这个函数来说,他单独的声明了,从他声明的行开始,到文件结束 起作用。
所以main()函数的使用prtstr(),编译也不会出错。

生成和使用.a库操作步骤

  1. 编译源代码,生成.o目标文件,如:gcc -c test.c
  2. 使用ar指令打包ar -rv libtest.a test.o
    注:ar命令可以用来创建、修改库,也可以从库中提出单个模块。
    r:在库中插入模块(替换)。当插入的模块名已经在库中存在,则替换同名的模块。如果若干 模块中有一个模块在库中不存在,ar显示一个错误消息,并不替换其他同名模块。默认的情况下,新的成员增加在库的结尾处,可以使用其他任选项来改变增加的 位置。
    v: 该选项用来显示执行操作选项的附加信息。
  3. 使用编译好的库文件, 如: gcc main.c -L. -ltest -o main
    注:-L/path, 以上-L.表示在当前目录下;-lxxx把库文件的lib和扩展名去掉,所以以上 -ltest 就可以是libtest.a了
    注:为了保证c++代码能正常使用c的库文件,在接口函数的头文件里要使用以下几行代码,其中宏__cplusplus是c++自定义的。
    注:main.c 中需要包含libtest.a库中的函数头文件,否则会出现找不到函数/变量定义的问题。
    #ifdef __cplusplus
    extern “C” {
    #endif

    #ifdef __cplusplus
    }
    #endif
    加上extern "C"后,会指示编译器这部分代码按C语言(而不是C++)的方式进行编译

管理Linux环境下的C/C++大型项目,如果有一个智能的Build System会起到事半功倍的效果,本文描述Linux环境下大型工程项目子目录Makefile的一种通用写法,使用该方法,当该子目录内的文件有增删时无需对Makefile进行改动,可以说相当的智能。下面先贴代码(为减小篇幅,一些非关键的代码被去掉,本方法的局限是用于一个C文件生成一个可执行文件的场合):ROOTDIR = .EXE_DIR = ./bin
CFLAGS = -I$(INCLUDE_DIR) -I$(LIB_INC) -Wall
LFLAGS = -L$(LIB_DIR)objects := $(patsubst %.c,%.o,$(wildcard *.c))
executables := $(patsubst %.c,%,$(wildcard *.c))all : $(objects)
$(objects) :%.o : %.c@mkdir -p ./bin$$(CROSS_COMPILE)gcc -c $(CFLAGS) $< -o $@$(CROSS_COMPILE)gcc $(CFLAGS) $< -o $(subst .o, ,$(EXE_DIR)/$@) $(LFLAGS) $(LIBS)
clean:@rm -f *.o rm -f $(executables)@rm -rf ./bin
distclean: clean假如当前目录里面有a.c b.c两个文件Makefile 里的函数跟它的变量很相似——使用的时候,你用一个$符号跟左圆括号,函数名,空格后跟一列由逗号分隔的参数,最后用右圆括号结束。例如,在GNU Make里有一个叫'wildcard' 的函数,它有一个参数,功能是展开成一列所有符合由其参数描述的文件名,文件间以空格间隔。像这个命令:objects= $(wildcard *.c)   会产生一个所有以'.c' 结尾的文件列表(本例结果为a.c b.c),然后存入变量objects里。   另一个有用的函数是 patsubst ( patten substitude,匹配替换的缩写)函数。它需要3个参数——第一个是一个需要匹配的式样,第二个表示用什么来替换它,第三个是一个需要处理由空格分隔的序列。我们将两个函数合起来用:objects := $(patsubst %.c,%.o,$(wildcard *.c))会被处理为:
objects := a.o b.o同理:
executables := $(patsubst %.c,%,$(wildcard *.c))会被处理为:
executables := a b%o:所有以“.o”结尾的目标,也就是a.o b.o依赖模式“%.c”:取模式“%.o”的%,也就是foo bar,并为其加上.c后缀,即a.c,b.c$<:表示所有依赖目标集,也就是a.c b.c$@:表示目标集,也就是a.o b.o命令前加@,表示在终端中不打印,如@mkdir -p ./bin$(objects) : %.o: %.c$(CROSS_COMPILE)gcc -c $(CFLAGS) $< -o $@即可翻译为: a.o b.o : a.c b.c    $(CROSS_COMPILE)gcc -c $(CFLAGS) (a.c b.c) -o (a.o b.o)明白了这些,这种Makefile的写法就可以完全掌握了。
命令:ls -d(只显示当前文件夹)
CC = gcc                                    
CFLAGS = -Wall -g 
BIN = main.out
SUBDIR = $(shell ls -d */)      //调用shell命令 ls -d */ 列出当前目录的子目录,不包含当前目录中的文件
ROOTSRC = $(wildcard *.c )      //$(wildcard  *.c)表示从当前目录中查找*.c的文件/文件夹
ROOTOBJ = $(ROOTSRC: %.c = %.o) //把ROOTSRC字符串中的.c结尾的字符串替换为.o结尾的字符串, %.c是GNUMake的写法,相当于shell的*.c
SUBSRC = $(shell find $(SUBDIR) -name ‘*.c‘) //调用shell命令在当前目录的子目录中查找名字为 *.c 的所有文件
SUBOBJ = $(SUBSRC: %.c = %.o)    //在SUBSRC字符串中把.c结尾的字符串替换为.o结尾的字符串$(BIN) : $(ROOTOBJ) $(SUBOBJ)   //gcc生成main.out文件$(CC) $(CFLAGS)  -o $@  $^
.c.o:                          //表示.c 文件 依赖于 .o文件$(CC) $(CFLAGS) -c $<  -o  $@
clean:rm -f  $(BIN) $(ROOTOBJ) $(SUBOBJ)

-g选项是指可以用gdb调试


文章转载自:

http://t3vI1neE.Lskrg.cn
http://Vwoymw6c.Lskrg.cn
http://kVNwqk4Y.Lskrg.cn
http://JuhkHOi6.Lskrg.cn
http://0g6IkIBu.Lskrg.cn
http://t0H1vGmV.Lskrg.cn
http://LclJcueB.Lskrg.cn
http://g3f0GlCt.Lskrg.cn
http://jbvD3nc8.Lskrg.cn
http://0X03K0dk.Lskrg.cn
http://zgQwzXj3.Lskrg.cn
http://dKd4yDBt.Lskrg.cn
http://XDJ0eUWc.Lskrg.cn
http://gFXOryQv.Lskrg.cn
http://6TmZ4epJ.Lskrg.cn
http://DQeSOVdj.Lskrg.cn
http://anrC0sbB.Lskrg.cn
http://JVjeCMll.Lskrg.cn
http://Sza7pUmV.Lskrg.cn
http://NMxJJNNO.Lskrg.cn
http://jXX27Mdy.Lskrg.cn
http://MLS75e4F.Lskrg.cn
http://mKahY8cB.Lskrg.cn
http://ZIl5l3xF.Lskrg.cn
http://9v6JLJpO.Lskrg.cn
http://RfI9OTSs.Lskrg.cn
http://Rh5wrvOQ.Lskrg.cn
http://uUcuxrpq.Lskrg.cn
http://fapgDvPg.Lskrg.cn
http://TlVWOBAk.Lskrg.cn
http://www.dtcms.com/wzjs/632050.html

相关文章:

  • 公司可以做网站iis网站正在建设中
  • 在那做网站重庆公司建网站流程
  • 农产品信息网站的建设学室内设计培训哪里好
  • 社科联网站建设方案策划书wordpress通过.htaccess实现缓存压缩
  • 做变性手术视频网站企业培训心得
  • windows iis运行php网站灰色词seo推广
  • 网站制作公司 云南企业营销网站建设费用预算
  • 网站中的表格老备案域名购买
  • 网站空间哪家公司的好wordpress最好的插件
  • 自己的网站到期域名如何续费注册人力资源公司需要什么手续
  • 徐州网站建设多少钱wordpress小工具跟随
  • 在电脑上做苗木网站网站图片分辨率
  • 合租网站设计祥云县住房和城乡建设网站
  • dedecms小说网站模板怎么做属于自己的域名网站
  • 网站建设与运营实验购物网站建设容易出现的问题
  • 网站建设与设计实验报告手工制作大全简单
  • 深圳南山网站建设工作室个人主页网站设计代码
  • 网站策划方案实例新闻国际最新消息
  • 网站建设全网推广学做古装网站
  • 网站建设费 科研 类apmserve设置多个网站
  • 汕头自助建站模板长春工程建设信息网站
  • 北京 网站代运营做游戏模型参考的网站
  • 公司建设网站的报告书网站建设怎样才能吸引顾客
  • 广告推广营销网站企业如何打造品牌
  • 虚拟机 网站建设三网合一网站报价
  • 做地区招聘网站网站建设及维护干什么的
  • 南昌网站建设机构无锡网站建设咨询
  • 网站注册流程google ads 推广
  • 颇有名气的网站建设专家好网站开发策划要求
  • 网站免费个人空间申请o2o平台有哪些可以入驻