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

网站地图可以自己做么自己免费怎么制作网站吗

网站地图可以自己做么,自己免费怎么制作网站吗,酒店网络推广方案,邹平 建设项目 网站公示一、什么是库#xff08;Library#xff09; 二、库的分类 三、静态库、动态库优缺点 四、静态库的制作和使用 五、动态库的制作和使用 SO-NAME–解决主版本号之间的兼容问题 基于符号的版本机制 共享库系统路径 共享库的查找过程 有用的环境变量 gcc 编译器常用选项 Linux共…一、什么是库Library 二、库的分类 三、静态库、动态库优缺点 四、静态库的制作和使用 五、动态库的制作和使用 SO-NAME–解决主版本号之间的兼容问题 基于符号的版本机制 共享库系统路径 共享库的查找过程 有用的环境变量 gcc 编译器常用选项 Linux共享库、静态库、动态库详解 一、什么是库Library 在计算机编程中库Library是一组预先编写好的可重用代码的集合旨在为软件开发者提供特定功能或一组功能。库通常包含一组函数、例程、类、变量等开发者可以在自己的程序中引用这些库以实现特定的任务而无需编写相同的功能代码。 有两种主要类型的库 静态库Static Library 静态库是在编译时与程序链接的链接过程会将库的代码嵌入到最终的可执行文件中。这意味着可执行文件包含了程序和库的所有代码使得程序可以独立运行但也导致可执行文件的体积较大。静态库的文件通常具有.lib在Windows上或.a在类Unix系统上的扩展名。 动态库Dynamic Library 动态库是在运行时加载到内存中的程序在需要时链接到库。这样多个程序可以共享同一份库的实例减小了可执行文件的体积。动态库的文件通常具有.dll在Windows上或.so在类Unix系统上的扩展名。 使用库的主要好处包括 代码重用 可以使用库中的功能而不必重复编写相同的代码。模块化 库可以被看作是程序的模块有助于代码的组织和管理。可维护性 对库的修改和升级可以在所有使用该库的程序中生效。 一些常见的编程库包括标准库如C标准库、C标准库、图形库如OpenGL、网络库如libcurl、数学库如NumPy、GUI库如Qt、数据库访问库如SQLite。 库是一种可执行代码的二进制形式可以被操作系统载入内存执行。就是将源代码转化为二进制格式的源代码相当于进行了加密别人可以使用库但是看不到库中的内容。 二、库的分类 库Library可以根据其使用和链接方式的不同分为不同的类型。主要的三种库类型包括 静态函数库Static Link Library 静态库在编译时被链接到目标程序中链接器将库的代码整合到最终的可执行文件中。这意味着目标程序独立于库文件包含了库的实现。静态库的文件通常具有.lib在Windows上或.a在类Unix系统上的扩展名。静态库的优点是运行时不需要额外的加载步骤但缺点是多个程序如果使用相同的库会导致代码冗余。 共享函数库Shared Library 或 Dynamic Link Library 共享库在运行时被加载到内存中而不是在编译时被链接到目标程序中。多个程序可以共享同一份库的实例这减小了每个程序的体积。共享库的文件通常具有.dll在Windows上或.so在类Unix系统上的扩展名。共享库的优点是减小了可执行文件的体积但需要在运行时动态加载可能引入一些开销。 动态加载库Dynamic Loading Library 动态加载库是一种在程序运行时根据需要加载的库。程序可以在运行时选择性地加载和卸载这些库而不是在程序启动时就加载全部。动态加载库通常与操作系统提供的动态链接库机制一起使用。这种方式允许程序更灵活地管理库的使用。 这三种库类型各有优缺点选择取决于具体的应用场景和需求。 在Linux系统中共享库动态链接库的命名规则通常遵循以下格式 libname.so.x.y.z其中各部分含义如下 lib: 固定表示这是一个共享库文件。name: 共享库的名称。so: 固定表示这是一个共享对象shared object库。x: 主版本号。当进行不兼容的更改时增加通常表示库的接口发生了重大变化。y: 次版本号。在保持向后兼容性的情况下进行的更改。z: 发行版本号。通常表示对库的轻微更改或修复。 例如如果一个库的名字是libexample.so主版本号是1次版本号是2发行版本号是3那么完整的库文件名可能是libexample.so.1.2.3。 对于静态库命名通常为 libname.a其中各部分含义相同只是没有版本号因为静态库在编译时已经被链接到可执行文件中不涉及版本问题。 win平台下静态库通常后缀为 .lib动态库为 .dll linux平台下静态库通常后缀为 .a动态库为 .so 1. 静态库 所谓静态库就是在静态编译时由编译器到指定目录寻找并且进行链接一旦链接完成最终的可执行程序中就包含了该库文件中的所有有用信息包括代码段、数据段等。 静态链接库在程序编译时会被链接到目标代码中目标程序运行时将不再需要改动态库加载速度快移植方便体积较大浪费控件和资源因为所有相关的对象文件与牵涉到库都被链接合成一个可执行文件这样导致可执行文件的体积较大。 2. 动态库 所谓动态库就是在应用程序运行时由操作系统根据应用程序的请求动态到指定目录下寻找并装载入内存中同时需要进行地址重定向。 动态库在程序编译时并不会被链接到目标代码中而是在程序运行时才被载入因为可执行文件体积较小。有了动态库程序的升级会相对比较简单比如某个动态库升级了只需要更换这个动态库的文件而不需要去更换可执行文件。但要注意的是可执行程序在运行时需要能找到动态库文件。 三、静态库、动态库优缺点 静态库 优点 1.静态库被打包到应用程序中加载速度快 2.发布程序无需提供静态库因为已经在app中移植方便 缺点 1.链接时完整地拷贝至可执行文件中被多次使用就有多份冗余拷贝。 2.更新、部署、发布麻烦。 动态库 优点 1.链接时不复制程序运行时由系统动态加载到内存供程序调用系统只加载一次多个程序可以共用节省内存。 2.程序升级简单因为app里面没有库的源代码升级之后只要库的名字不变函数名以及参数不变只是实现做了优化就能加载成功。 缺点 加载速度比静态库慢 发布程序需要提供依赖的动态库 四、静态库的制作和使用 (1)命名规则 静态库文件名的命名方式是“libxxxx.a”,库名前加“lib”后缀用“.a”“xxx”为静态库名。 (2)制作步骤 原材料源代码 .c 或者 .cpp 将 .c文件生成 .o gcc test.c -c将 .o 打包 ar rcs 静态库的名字 原材料 ar rcs libxxxx.a test.o(3)库的使用 -I(大写i)指定头文件搜索路径 默认默认路径 /usr/include/ -L: 指定库文件搜索路径 -l(小写L)链接名为libmycalc.a的共享库指定库的名字去掉lib和.a -o:指定生成的最终应用程序的名字 gcc main.c -I /usr/include/ -L ./lib -lmycalc -o app这个命令是将main.c文件编译成一个名为app的可执行文件期间需要链接名为libmycalc.a的共享库并且指定了头文件和库文件的搜索路径。 五、动态库的制作和使用 (1)命名规则 动态库的命名方式与静态库类似前缀相同为“lib”后缀变为“.so”。所以为“libmytime.so” (2)制作步骤 gcc -shared -fpic test.c -o libtest.so -shared : 指定生成动态库 -fpic : 生成位置无关代码(3)动态库的使用 gcc main.c -ltest -L ./ -o main动态库优先从当前路径去找没找到的话再去 /usr/lib/ 下去找通常动态库拷贝到 /usr/lib/ 下即可 sudo cp libtest.so /usr/lib/./main 动态库无法加载引用动态库怎么指定动态库的位置 临时设置在终端进行export LD_LIBRARY_PATH“动态库的路径” export命令环境变量设置 利用脚本 //创建一个.sh文件 vi start.sh export LD_LIBRARY_PATH/home/pi/test/动态库的路径 ./mianPrody//所要执行的程序名称 //在文件夹中输入以上内容chmod x start.sh //给脚本加可执行的的权限 ./start.sh //执行该脚本SO-NAME–解决主版本号之间的兼容问题 libname.so.x.y.z -- libname.so.x 即创建一个只保持主版本号的符号链接到特定的共享库上。这样做的好处是在编译链接、执行时始终使用符号链接来保持对于当前主版本更新的灵活性。使用gcc -l参数后面跟链接库名字就是链接某个库的意思。其中可以只使用-l name链接器会自动寻找最新的版本。lc为根据输出文件来决定链接动态版本还是静态版本。 -Bdynamic为链接动态库 -static找静态库。 基于符号的版本机制 SO-NAME只解决主版本号的区分。次版本号可能存在不兼容此时采用符号版本机制。大体策略就是讲共享库的符号按照版本划分为有依赖关系的集合比如S1-S2-S3…-SN表达了一个高版本依赖低版本的集合例子。编译时用到了那些集合就标记用到的最高版本的符号集合比如某个可执行用到了S3符号集那么它可以在包含大于S3的版本的系统中运行否则链接器会负责报错。 共享库系统路径 大多数开源操作系统包括linux遵循FHS标准(File Hierarchy Standard文件层级标准)规定了系统内每个目录该放什么东西。对于共享库相关的定义如下。 /lib放最关键、最基础的共享库。如动态链接器、C语言运行库、数学库等主要被/bin和/sbin下程序用到的库。/usr/lib/ 存放非运行时的关键性共享库主要是开发时用到。/usr/local/lib 存放和操作系统本身并不相关的库一般是第三方程序的库。 共享库的查找过程 首先可执行程序和共享库中在.dynamic段中的DT_NEED类型中的项表明了可执行程序、共享库所依赖的共享库。如果是绝对路径则去找那个路径。如果是相对路径则首先在LD_LIBRARY_PATH环境变量中定义的路径下查找之后在/etc/ld.so.conf定义的目录中查找但是一般这个步骤只在缓存中查找即使用ldconfig来进行缓存然后链接器在/etc/ld.so.cacha中查找最后再/lib和/usr/lib中查找。如果还没有则宣告失败。在编译链接时期LD_LIBRARY_PATH相当于gcc附加的-L选项。 有用的环境变量 LD_LIBRARY_PATH编译时相当于gcc中附件-L选项 运行时告诉链接器首先在这个变量定义的目录中查找相对路径依赖库。LD_PRELOAD 指定预先装载的共享库或者目标文件优先于LD_LIBRARY_PATH。由于全局符号介入LD_PRELOAD中定义的符号会覆盖以后加载的符号可以实现更方便的debug覆盖某些函数添加打印信息。LD_DEBUG可以指定在动态链接库发挥作用时打印的信息可以设置的值有 files显示整个装载过程bindings显示动态链接符号绑定过程libs显示动态链接库的查找过程versions显示符号版本的依赖关系reloc显示重定位过程symbols显示符号表查找过程statistics显示动态链接过程中的各种统计信息all显示所有信息help显示上面的可选值的帮助信息 gcc 编译器常用选项 下面是关于gcc编译器常用选项的简要说明 选项含义-o output_file指定输出文件的名称。-c生成目标文件.o但不进行链接用于编译源文件。-I include_path指定头文件搜索路径。-L library链接时使用指定的库。-e entry_point指定程序的入口点用于生成可执行文件。-Wall启用警告信息。-g生成调试信息。-stdstandard指定使用的C或C标准。-pthread在编译和链接时启用POSIX线程支持。-Dmacro定义宏。-Olevel指定优化级别。-lm链接数学库。-lrt链接实时库。-lpthread链接POSIX线程库。-shared生成共享库。 以上是一些常用的gcc选项具体用法可以根据编译的需求进行调整。
http://www.hkea.cn/news/14565227/

相关文章:

  • 网站定制开发费用多少网站备案到公司名称
  • 站长工具app官方下载购物网站开发需求文档
  • 网站维护 上海淘宝购物网站开发有什么功能
  • 可以建网站的公司找不到网站后台怎么办
  • 网站权重能带来什么作用网站源码在线查看
  • 南川区 网站集约化建设方案四川招标信息网官网
  • 网站开发了下载文件需要网页设计公司开设需要投资多少钱
  • 企网站建设郑州小程序开发价格
  • 五合一网站做优化好用吗盘锦化工网站建设
  • seo针对网站做策划大公司的网站都找谁设计
  • 重庆南昌网站建设石家庄关键词优化平台
  • 优质院校建设网站asp.net 4.0网站开...
  • 张家港网站建设公司去除 做网站就用建站之星
  • 海口网站建设方案优化建设银行网站怎么短信转账
  • 地狱少女通信网站怎么做香山网站建设
  • 互联网建设企业网站巩义seo
  • 贵州省建设厅报名网站广州建设工程交易中心电话
  • 做网站页面设计报价如何做淘宝返利网站
  • 个人网站上传有啥要求seo网站推广优化费用
  • 乱码网站怎么办net core 仿wordpress
  • 企业多语言网站开源百度指数api
  • wap网站开发作业科技有限公司一般是做什么的
  • 表情包制作网站wordpress怎么翻墙
  • 深圳网站的公司深圳定做网站
  • 婚恋网站建设成本做网站的公司怎么发展业务
  • 学校网站建设基本流程建设网站比较好公司吗
  • 网站技能培训班有哪些做美食网站的需求分析
  • 景观石网站建设方案网站建设注意哪些
  • 虚拟主机多网站网站建设宣传词
  • 如何批量做网站wordpress 内容页模板