最近解决一个动态链接上的问题,因为以前从来没有接触过这方面的知识,所以恶补了一下,首先要了解gcc编译指令(makefile),ld链接器的选项(还有连接脚本section指定内存位置),熟悉查看连接状态是否成功的指令工具(其中又有elf格式,ld.elf相关指令).然后反汇编理解动态链接的实际执行过程,总的说来这里面的东西还真很多,主要是网上比较深入资料很少,大部分博文也是一知半解,所以后续有问题应直接阅读标准文档.<程序员的自我修养----链接.装载与库>这本书详细介绍了一个应用程序在编译…
9.1 DLL简介 DLL即动态链接库的缩写,它相对于Linux下的共享对象. Windows下的DLL文件和EXE文件实际上是一个概念,它们都是有PE格式的二进制文件. 微软希望通过DLL机制加强软件的模块化设计,使得各种模块之间能够松散地组合.重用和升级. 9.1.1 进程地址空间和内存管理 一个DLL在不同进程中拥有不同的使用数据副本.在ELF中,由于代码段是地址无关的,所以它可以实现多个进程之间共享一份代码,但是DLL的代码却并不是地址无关的,所以它只是在某些情况下可以被多个进程间共享.…
VS2008 Release 修改配置: 1.项目——>属性——>C/ C++ ——> 常规 ——>调试信息格式——>用于“编辑并继续”的程序数据库(/ZI) 2.项目——>属性——>C/ C++ ——> 优化——>优化——>禁用(/Od) 3.项目——>属性——>C/ C++ ——> 优化——>优化——>全程序优化(否) 4.项目——>属性——>链接器 ——>生成调试信息——>是(/DEBU…
2.1.3  我的父亲母亲:编译器和链接器 从表面上看,我是由Visual Studio创建的,而实际上,真正负责编译源代码创建生成可执行程序HelloWorld.exe的却是Visual Studio中集成的C++编译器cl.exe和链接器link.exe.他们二老,才是我的亲生爹妈. 为了便于人们的编写.阅读和维护,我们的源文件是使用C++这种人们可以理解的高级程序设计语言编写的.然而,计算机却并不理解这种高级语言,也就无法直接执行高级语言编写而成的源文件.所以,这里就需要一个翻译的工作,将…
Linux线上排查程序员实用指南 一.乱码问题 二.帮助指令 1. help命令 2. man命令 3. info命令 三.性能监测与优化 1. top命令 参考资源 Linux线上排查程序员实用指南 一.乱码问题 1.Linux系统编码 有时候你会发现linux系统打印出来的文字是乱码,一般是要么是你连接Linux的终端编码有问题,或者是linux系统编码设置不对 (1)执行locale命令查看系统语言 [root@localhost /]# locale LANG=zh_CN.GBK LC_…
关于npm包安装命令的介绍,如下图:…
读完<程序员的自我修养--链接.装载和库>相关章节,想来总结一下,若有错误,请指正,多谢. 1. 什么叫目标文件? 你的工程里有很多xxx.c这样的源文件,这些文件是文本文件,只有人能够认识(当然编译器认识),但是,cpu可不认识.问题就是,真正执行指令的是cpu. 让编译器翻译一下(这里面有很多过程,这不是这篇文章的重点),一般来说,一个xxx.c文件就能翻译成一个xxx.o,这就是目标文件了. 一个源文件就对应一个目标文件,这个目标文件就存储了有关这个源文件的所有信息了,包括在这个源文件里…
环境:VS2008   我们都知道,链接器在生成可执行程序时,会忽略那些没有用到的符号.但是昨天遇到一个链接问题,看起来与这条基本策略并不相符.首先看一个静态链接库的结构:   lib | |---------------------| a.cpp b.cpp | | |-------| |-----------| fun1 fun2 fun3 fun4 | ↑___________| ↓ GetModuleFileNameEx(psapi.lib)   这个库里只存在两个依赖:b.cpp中的f…
目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Acceptor 系统函数accept Socket的封装 Acceptor的封装 Acceptor时序图. 简单测试程序 Acceptor Connctor 运行日志 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor 标签: muduo Connector Acceptor…