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

开元棋牌网站怎么做做网站要什么颜色模式

开元棋牌网站怎么做,做网站要什么颜色模式,北京医疗网站建设,网页设计与制作实用教程电子资源1、动态库和静态库概念 Linux中的库分为动态库和静态库。 静态库#xff08;.a#xff09;#xff1a;库文件以.a为后缀#xff0c;程序在编译链接时把库的代码链接到可执行文件中#xff08;将需要的库函数拷贝一份到代码中#xff09;。程序运行时不需要再跳转到静态…1、动态库和静态库概念 Linux中的库分为动态库和静态库。 静态库.a库文件以.a为后缀程序在编译链接时把库的代码链接到可执行文件中将需要的库函数拷贝一份到代码中。程序运行时不需要再跳转到静态库。 动态库.so库文件以.so为后缀程序在运行时才去链接动态库的代码运行时跳转到动态库中在动态库中执行库函数。多个程序共享库的代码。 链接的本质我们调用库函数时是如何与标准库联系的。 库的名称去掉前缀lib和后缀’.a/.so’剩下的就是库名称例如libc.so就是C库。 gcc/g在编译时默认使用动态链接如果想要生存静态链接我们要带上-static。 2、库 我们了解了动态库和静态库的相关概念但是我们还是不理解库是个什么东西。 假设我们做了一个小程序只希望提供给用户小程序的功能不希望暴露我们的源码。我们可以选择给用户提供我们的.o可重定位目标二进制文件gcc -c 文件与头文件。让用户使用我们提供的.o文件和.h文件进行链接即可。在编译时只需要把源文件编译成.o文件再将其链接即可形成一个可执行程序因此我们可以直接提供.o文件。 文件add.c 1 #includeadd.h2 int add(int x, int y)3 {4 printf(ADD: %d %d ?\n,x, y);5 return x y;6 }文件mul.c 1 #includesub.h2 int sub(int x, int y)3 {4 printf(SUB : %d - %d ?\n,x, y);5 return x - y;6 }文件add.h 1 #pragma once2 #includestdio.h3 extern int add(int, int);文件sub.h 1 #pragma once2 #includestdio.h3 extern int sub(int, int);文件main.c 1 #includeadd.h2 #includesub.c3 int main()4 {5 int a add(1, 2);6 int ret sub(10, a);7 return 0;8 }运行 我们给用户同时提供.o文件方法的实现以及.h文件方法的声明用户就可以链接形成可执行程序。 但是如果我们有很多.c文件难道我们要将所有的.c文件全部编译成.o文件然后一个一个提供给用户吗未免太过麻烦。我们可以把编译得到的所有.o文件打包直接给对方提供一个库文件即可。把多个.o文件打包成一个文件这个文件就是库。 库的本质就是.o文件的集合。 3、制作静态库 首先如果写一个库是否需要写main函数 答案是不需要因为库是提供给别人使用的用户自己写的main函数会与库函数起冲突。我们需要在编写库的角度和使用库的角度同时考虑来制作库 编写库 3.1 创建Makefile 1 libmymath.s:add.o sub.o2 ar -rc $ $^3 add.o:add.c4 gcc -c add.c -o add.o5 sub.o:sub.c6 gcc -c sub.c -o sub.o7 .PHONY:output8 output:9 mkdir -p mylib/include10 mkdir -p mylib/lib11 cp -f *.a mylib/lib12 cp -f *.h mylib/include13 .PHONY:clean14 clean:15 rm -f *.o libmymath.a3.2 打包库 将文件编译为.o文件 or命令把所有.o文件打包起来or作用是归档-rcreplace和create例如 or -rc libmymath.a add.o sub.ooutput发布。交付库将库文件.a以及配套的头文件都交给用户。 将mylib打包起来。 此时用户如果需要我们的库只需要将mylib.tgz拷贝过去 cp mylib.tgz .../test然后解压 tar xzf mylib.tgz安装本质就是拷贝。 3.3 使用库 文件main.c 1 #includeadd.h2 #includesub.h3 int main()4 {5 printf(1 2 %d,add(1, 2));6 printf(10 - (1 2) %d,sub(10,3));7 return 0;8 }为什么会找不到头文件 编译器搜索头文件默认是在当前目录下搜索在系统默认指定路径下搜索。虽然此时的mylib在当前路径下但是头文件太深了文件不在本层编译器找不到头文件因此我们需要给gcc指定路径-I。指明在当前路径下mylib目录中查找。 gcc -o mymath main.c -I ./mylib/include此时出现了新问题——找不到库函数的实现。 我们在形成可执行程序时库文件要使用必须知道库所在的路径而系统中库默认路径为/lib64。因此我们要告诉gcc它要链接的库的路径在哪里-L。 如果要链接第三方的库必须去指明库的名称注意指明时要去掉前缀和后缀!也就是说一定要告知是哪一个路径下的哪一个库即使该路径下只有一个库也要明确告知gcc是哪一个库我们以前写代码的时候从未指明库的名称是因为gcc/g默认帮我们填写了因为它们可以识别C/C自带的库。但是自己写的库或者第三方库必须要写明。 gcc -o mymath main.c -I ./mylib/include -L ./mylib/lib -l mymath结果正确 总结 -I 指明头文件的路径 -L 指定库文件目录可以指定多个文件目录。库目录没有在/lib、/usr/lib、/usr/local/lib中则必须用-L来指定一个库目录 -l 指定具体的库文件。如果没有指定则默认去/lib、/usr/lib、/usr/local/lib去找。默认寻找的是动态库可以指定-static,寻找静态库。 注意 gcc默认是动态链接对于一个特定的库究竟是动态链接还是静态链接取决于提供的是动态库还是静态库。 库的安装 将库安装到系统头文件下。 gcc对头文件的默认路径为/usr.include对于库文件的默认路径是/lib64 sudo cp 头文件包含路径 /usr/include/sudo cp 库文件包含路径 /lib64/但是不太推荐将第三方库写入系统默认路径因为第三方库未经过测试会污染系统内其它文件。 4、制作动态库 首先我们将文件全部编译成.o文件这里与制作静态库不同的是需带上-fPIC形成位置无关码 gcc -c -fPIC add.c动态库打包 gcc -shared -o libmymath.so add.o sub.o 我们试着运行mymath 为啥运行不了呢为啥找不到库 我们的确已经告诉了gcc我们的库文件的路径以及库名称但是我们编译完成后程序与gcc还有关系吗程序是由gcc运行的吗显然此时程序与gcc无关。接下来的程序运行是由OS来进行的。 动态库是程序运行时才进行链接的而程序的运行是OS和shell来执行的因此OS和shell也需要知道库文件的路径及名称。但是我们自己制作的库并不在系统的默认路径下因此OS无法找到库就无法正常执行程序。那么我们要如何让OS找到我们的库呢 我们可以将库路径添加到环境变量LD_LIBRARY_PATH中。例如 export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/home/Jinger/dir1/mylib/lib/libmymath.so直接运行 注意我们自己定义的环境变量只是本次登录有效如果想永久有效只能修改环境变量的配置。当然我们还有其它办法 配置文件/etc/ld.so.conf.d/动态库进行搜索时可以通过自己定义conf文件找到动态库。 建立软链接直接找到对应的库。 把对应的动态库建立在系统的目录下。 总结 拷贝.so文件到系统共享库动态库路径下默认路径是/usr/lib 更改LD_LRBRARY_PATH ldconfig配置/etc/ld.so.conf.d/ldconfig更新 创建软链接 5、动静态库的加载 静态库不需要加载静态库是将代码直接拷贝到程序中因此内存中的代码和数据可能会存在多分造成空间浪费。把静态库代码拷贝到内存中的代码区 动态库通过fPIC形成位置无关码采用相对编址的方式在程序链接时将对应库中的偏移量添加到程序中库函数在程序运行时加载进来经过页表把库映射到虚拟地址空间后共享区库就具有了起始地址。通过起始地址和偏移地址就可以找到要调用的库函数。 系统层面上会维护动态库的起始地址虽然刚刚加载时不能确定起始地址因为共享区是由OS分配的但是加载完毕就不会改变了直接建立页表与内存的映射就可以直接跳转访问了。所以动态库加载一次就可以被多个进程共同使用。 动态库相对于静态库更节省内存静态库由多个程序使用相同的库函数加载到内存中就会导致内存中有多份重复的库函数代码而动态库则是多个程序共用一份动态库不会导致出现重复的库函数代码就节省了内存空间。
http://www.huolong8.cn/news/90844/

相关文章:

  • 秦皇岛手机网站制作价格鞋帽箱包网站建设
  • 表白网站源码大全jsp网站开发关键技术
  • 用dw制作个人网站网络营销课程多少钱
  • 一个网站设计的费用wordpress开启缩略图
  • 金融做网站朝阳网站设计
  • 永州市建设工程质量安全监督站官方网站苏州设计网站
  • 中国建设银行进不了登录网站在线p图网页版免费
  • 网站域名查询系统北京广告网站建设
  • 网站开发技术培训专业手机建站公司
  • 网站静态图怎么做公众号开发设计费用
  • 做设计找素材的+网站有哪些wordpress小工具浮动
  • iis7.5发布网站教程新吴网站建设
  • 网站建设服务公司案例蜜淘app在那个网站做的
  • 晾衣架 东莞网站建设国内知名室内设计公司
  • 做不做我女朋友的网站专门做电商的招聘网站
  • 英语网站 php源码php网站服务器搭建
  • 广州网站推广方案济南医院网站建设服务公司
  • 吉林省住房和建设厅网站廊坊网站备案
  • 网站mssql 导出数据沃尔玛商城
  • 建个小型网站服务器wordpress 可视化编辑
  • 那些网站可以做公司的推广山东住房和城乡建设厅网站首页
  • 大庆做网站找谁网络营销产品价格策略
  • 专做蓝领招聘网站有哪些免费空间服务的网站
  • 专业自助建站图书馆网站建设的意义
  • 手机网站菜单设计模板html网站建设实例代码
  • 网站所有页面扬州互联网公司
  • 什么网站能看男女做暧公司注册代理中介
  • 网站建设经营服务合同范本用wordpress做广告收益
  • 豫建设标 网站重庆搜索排名提升
  • 莱西做网站国内重大新闻事件