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

物流网站做那个好成功的品牌推广案例分析

物流网站做那个好,成功的品牌推广案例分析,龙岗区建设工程交易服务网,网站首页设计大赛链接器 1. C源文件都有些什么1.1 . 目标文件里有什么 2. 符号表 Symbol table2.1. 符号表的位置2.2. 符号的决议2.3. 符号决议过程 3. 实例说明3.1. 意外出现3.2 总结排查 在上篇文章中#xff0c;我们介绍了 链接器基本概念#xff0c;我们知道所有的应用程序否是连接器将所… 链接器 1. C源文件都有些什么1.1 . 目标文件里有什么 2. 符号表 Symbol table2.1. 符号表的位置2.2. 符号的决议2.3. 符号决议过程 3. 实例说明3.1. 意外出现3.2 总结排查 在上篇文章中我们介绍了 链接器基本概念我们知道所有的应用程序否是连接器将所需要的一个个简单的目标文件汇集起来形成的。 比如我们在 list 中实现了一种特定的链表数据结构其他模块需要使用这种链表这就是模块直接的依赖。 确保目标文件能找到符号定义 (Symbol Resolution) 符号决议 链接器的其中一项重要任务就是 确保提供链接器进行链接的目标文件集合之间依赖是成立的也就是说不会出现在被依赖的模块中链接器找不到需要依赖的接口。 可执行程序的生成 链接器会首先将程序每个模块当中目标文件集合链接成库然后在将各个库进行链接最终形成可执行程序。 重定位 在完成 符号决议和生成可执行文件之后链接器需要对可执行文件进行重定位。 下面我们围绕上面三个部分来详细的讲解下每一个过程。 1. C源文件都有些什么 一个典型的C源文件中该文件中的变量可以划分为两类。 全局变量只要程序没结束运行全局变量都可以随时使用。注意静态的全局变量生命周期也等于程序的运行周期只是这种全局变量只能在所 被定义的文件当中使用对其它文件不可见。局部变量局部变量的生命周期和全局变量的生命周期不同局部变量只能在相应的函数内部使用当函数调用完毕后局部变量也不能使用 。 // 1. 定义未初始化的全局变量 int x_global_uninit; // 2. 定义初始化的全局变量 int x_global_init 1; // 3. 定义未初始化的全局私有变量该变量只能在当前文件中使用 static int y_global_unint; // 4. 定义未初始化的全局私有变量该变量只能在当前文件中使用 static int y_global_init 2; // 5. 声明全局变量但是该变量在其他文件中定义 extern int z_global; // 6. 声明函数该函数在其他文件中定义 int fn_a(int x, int y); // 7. 函数定义因为使用static 修饰该函数只能在当前文件中使用 static int fn_b(int x) {return x1; } // 8. 函数定义该函数可以被其他文件使用 int fn_c(int x_local) {// 9. 未初始化的局部变量int y_local_unint;// 10. 已初始化的局部变量int y_local_init 3;// 11. 全局变量局部变量以及函数的使用x_global_uninit fn_a(x_local,x_global_init);y_local_uninit fn_a(x_local,y_local_init);y_local_uninit fn_b(z_global);return (y_global_uninit y_local_uninit); }1.1 . 目标文件里有什么 编译器的任务就是把人类可以理解的代码 转换成机器可以执行的机器指令源文件编译后形成对应的目标文件本质上可以分成两部分 代码部分计算机可以执行的机器指令也就是源文件中定义的所有函数比如上图中fn_a() fn_b() 等数据部分源文件中定义的全局变量如果是已经初始化后的全局变量该全局变量的值也存在于数据部分。 2. 符号表 Symbol table 编译器在编译过程中遇到外部定义的全局变量或函数时只要能在当前文件中找到其声明即可编译器就会认为是正确的。 寻找变量的定义就被留给了 链接器链接器的一项重要任务就是要确定所使用的变量要有其唯一的定义。虽然这项工作留给了链接器但是为了让链接器工作的轻松一点编译器还是多做了一点工作这部分工作就是 符号表Symbol table。 那么符号表保存的是什么了 该目标文件中引用的全局变量以及函数该目标文件中定义的全局变量以及函数 如 标题2所知编译器在编译过程中每次遇到一个全局变量或者函数名都会在符号表中添加一项最终编译器会统计出如下所示的一张读好表 2.1. 符号表的位置 符号表被编译器很贴心的放在目标文件中因此一个目标 文件可以理解为下图所示的三段 2.2. 符号的决议 在上一节符号表中我们知道符号表给链接器提供了两种信息。 一个是当前目标文件可以提供给其他目标文件使用的符号。另一个是其他目标文件需要提供给当前目标文件使用的符号。 2.3. 符号决议过程 如下图所示假设链接器需要链接下面三个文件。链接器会一次扫描每一个给定的目标文件同时链接器还维护了两个集合一个是已定义符号集合D另一个是未定义的集合U下面是链接器进程符号决议的过程 对于当前目标文件查找其符号表并将已定义的符号并添加到已定义符号集合D中。对于当前目标文件查找其符号表将每一个当前目标文件引用的符号与已定义符号集合D进行对比如果该符号不在集合D中则将其添加到未定义符号集合U中。当所有文件都扫描完成如果未定义符号集合U不为空则说明当前输入的目标文件中有未定义符号错误链接器就会报错整个编译过程就会终止。 3. 实例说明 // 伪代码 // math.h #includeiostream int add(int a, int b);// math.cpp #includeiostream int add(int a, int b) {return ab; } // main.cpp #includeiostream #include math.h int main() {int sum add(1,2);std::cout sum std::endl;return 0; }链接过程如下 编译器在 链接 main.o 和 math.o 文件时。 matth.o 目标文件有add() 函数符号首先会在当前文件查找定义结果当前文件就存在add() 函数定义所以直接将符号add 添加到已定义集合D中main.o 目标文件也有add() 函数符号首先会在当前文件中查找定义结果当前文件不存在add() 函数定义然后在集合D中查找是否有定义结果找到了符号的定义当完成 main.o 和 math.o 两个目标文件链接后编译终止生成可执行文件。 3.1. 意外出现 假设你不小心将 math.cpp 中的add函数注释了但是main.cpp 仍然引用了add() 函数符号当你在编译的时候就会报很经典的 undefined reference to add(int, int) 错误。 现在我们来分析下产生这个错误的原因。 编译器发现你写的代码 main.o 中引用了外部定义定义的函数(通过检查目标文件 main.o 中的符号表得到的信息)所以链接器开始寻址这个add()符号到底是在哪里定义的。链接器先去目标文件 main.o 的符号表中查找没有找到 add() 符号的定义。转而链接器去其他目标文件符号表中查找通用没有找到add() 函数符号的定义链接器在查找了所有目标文件的符号表后都没找到add() 函数符号因此链接器停止工作并报出 undefined reference to add(int, int) 3.2 总结排查 所以根据前面几节的介绍讲解你已经很清楚的知道链接器符号决议整个过程当出现 未定义符号错误时你可以进行如下排查 main.cpp 中对add函数的函数名是否书写正确链接命令中是否包含了 math.o 如果没有那么需要添加上该目标文件如果链接命令没有问题查看 math.cpp 中关于 add函数的定义是否存在问题如果是C和C的混合编程确保相应的位置添加 extern C 一般情况下经过这几个步骤的排查基本能解决上述问题
http://www.w-s-a.com/news/34012/

相关文章:

  • 临沂网站建设厂家做外贸的女生现状
  • 电子商务网站建设实践临沂做网站的
  • 网站职能建设论文做外贸都有哪些网站
  • 网站建设项目需求分析房地产网站源码
  • 网站充值提现公司账务怎么做中国能建设计公司网站
  • 网站信息资源建设包括哪些网站网站做维护
  • 网站性能优化的方法有哪些建设施工合同网站
  • 郑州建设企业网站山西省住房和城乡建设厅网站
  • 做网站的去哪找客户正规制作网站公司
  • 网站代理访问是什么意思外国优秀设计网站
  • 合肥个人建站模板网络技术服务有限公司
  • 做网站什么公司好dw企业网站开发教程
  • 怎么做自己的个人网站宝安网站设计哪家最好
  • 浩博建设集团网站站长网站统计
  • 电商网站开发视频seo排名优化方式方法
  • 宿迁市住房城乡建设局网站wordpress纯图片主题
  • 广州建设网站 公司湖北省建设信息网官网
  • 网站建立时间查询做百度移动网站优化排
  • 网站建设和运行费用qq恢复官方网站
  • 可以免费建立网站吗免费的网络营销方式
  • 天津企业设计网站建设wordpress标题字体大小
  • 上高县城乡规划建设局网站创业项目
  • 钓鱼网站在线下载广州网站设计哪里好
  • 做阿里国际网站会有成效吗wordpress微博同步
  • 西安网站建设云速网络网站运营情况怎么写
  • 免费建网站的网站微信商城分销系统方案
  • 烟台网站seo服务友情链接有哪些展现形式
  • 什么是移动网站开发免费网站开发框架
  • 做网站 创业wordpress子菜单
  • 门户网站类型有哪些权重7以上的网站