随笔分类 - c
摘要:转载 1、变量名是给编译器看的,编译器根据变量是局部还是全局分配内存地址或栈空间,所谓的变量名在内存中不存在,操作时转换成地址数存放在寄存器中了。其实可以理解为是符号表起到了连接作用。 2、符号表 (此段摘抄网上一个课件) 符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类
阅读全文
摘要:本文转载自https://www.cnblogs.com/vipchenwei/p/8686472.html 他也是转载的,但是他里面的博客有些指的一看 本文转载于:https://www.zhihu.com/question/34266997?from=profile_question_card
阅读全文
摘要:libc中果然有很多的函数,使用nm看了一下,里面竟然还有reboot函数,汗! 使用grep,可以看到各种 printf 也都在这里头。 objdump是看函数的地址与函数名对应的,虽然也能证明printf在libc中,但是感觉有些大才小用哪。 使用objdump一下,比nm多出来一些信息,看来n
阅读全文
摘要:转载https://blog.csdn.net/iEearth/article/details/49952047 还有一篇博客也可以看看https://blog.csdn.net/xp5xp6/article/details/52513428 https://www.cnblogs.com/open
阅读全文
摘要:做C语言开发的人,经常会遇到“ANSI C”、“ISO C”与“Standard C”三种术语,经常会让人傻傻分不清楚。博主之前按也是搞不清三者的关系,于是某天下定决心,一定要搞清楚三者的关系,先百度上搜下。下面是在百度百科上搜索关键字“ANSI C”得到的结果: 分割线 http://baike.
阅读全文
摘要:现在centos6.8-x64系统里的c标准库已经成了glibc,glibc取代了libc,c标准库的位置在/lib64/libc.so.6 以下为转载 一、libc库 Linux平台提供的C标准库包括: 一组头文件,定义了很多类型和宏,声明了很多库函数。这些头文件放在哪些目录下取决于不同的编译器,
阅读全文
摘要:现在规定一下头文件书写规范, 根据陈皓编写的跟我一起些makefile,一定要记住:头文件中应该只是声明,而定义应该放在C/C++文件中。否则如果出现有定义,比如头文件中有int a =2;如果有多个源程序文件引用该头文件,那么在链接的时候就会出现重复定义,即使在头文件的首尾添加#ifnef,#de
阅读全文
摘要:gcc 生成 .a静态库和 .so动态库 我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。本
阅读全文
摘要:静态库是在链接阶段被链接的,所以生成的可执行文件就不受库的影响,即使库被删除,程序依然可以成功运行。 而依赖动态库的程序其实也有链接动态库的阶段,只不过这个链接并不是真正的将动态库链接到程序中,其目的是告诉程序,所依赖的到底是哪个动态库。 静态库有点类似于将静态库复制到程序中,而动态库是在程序中创建
阅读全文
摘要:转载自 https://www.cnblogs.com/qingjiaowoxiaoxioashou/p/6410588.html 根据链接时期的不同,库又有静态库和动态库之分。静态库是在链接阶段被链接的,所以生成的可执行文件就不受库的影响,即使库被删除,程序依然可以成功运行。而动态库是在程序执行的
阅读全文
摘要:这个命令很灵活,格式是: cc -o 目标二进制可执行文件 文件1 文件2 文件3 。。。。。 其中目标文件后面的文件,可为源代码,也可为二进制文件,也可为库文件 比如: cc -c a.c;此命令生成a.o cc -c b.c;此命令生成b.o ar -crv libb.a b.o;此命令生成静态
阅读全文
摘要:经测试,链接静态库的时候静态库的搜索路径包括/lib;/lib64;/usr/lib;/usr/lib64/;/usr/local/lib;/usr/local/lib64, 静态库文件完整的搜索顺序: 比如我们要生成的最终可执行文件叫main 主程序源代码叫main.c,生成好的库文件叫做kkk库
阅读全文
摘要:转载自:https://www.cnblogs.com/benio/archive/2010/10/25/1860394.html -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出
阅读全文
摘要:#include发生在预处理阶段,整个编译链接过程,#include是最简单的了,没有之一。就是在include的位置直接把文件原原本本完完整整一字不落的包含进来,下面举一个极端点的例子: 所以include后,源程序变为 2.关于c语言中#include 路径查找问题 1. 包含命令中的文件名可以
阅读全文
摘要:c从源代码到二进制可执行文件,到底经历了哪些步骤呢? 可分为两部,编译和链接,在linux中,编译的命令是cc -c,链接的命令是cc -o 而编译又可分为三部,分别是预处理,编译,汇编 程序的基本流程如图: 1. 预处理 预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有
阅读全文
摘要:一: python代码: 在b函数中,有a=4这样的代码,说明a是函数b内部的局部变量,而不是外部的那个值为2的全局变量a,那么第一行代码就报错了,原因是local variable 'a' referenced before assignment 而在c中就不会报错: 在main函数中,变量a开始
阅读全文
摘要:/*主程序在a.c*/ //a.c #include #include "b.h" main(){ printf ("%d\n",a); a=32; printf ("%d\n",a); bb(); } //a.c end //b.h int a; void bb(void); //b.h end //b.c #include #include "b.h" static ...
阅读全文
摘要://a.c #include #include "a.h" #include "b.h" void main(void) { printf("safadf %d",i); } //a.c end //a.h #include "b.h" //a.h end //b.h int i = 3; //b.h end /*本例中主程序在a.c中定义。 正常情况下,这三个文件都在同一目录下,进入该目录...
阅读全文
摘要:我想多说关于程序编译的一些规范和方法,一般来说,无论是C、C++、还是pas,首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动
阅读全文