随笔分类 -  gcc编译器

gcc complier的一些特点
摘要:写好的代码,在另外一个平台编译,出错,犹如上提示,两个环境的编译器版本不一样,搜到解决办法如下两台机器,一台编译正常,另一台报错:error: syntax error before "pthread_rwlock_t"仔细查看发现编译正常的机器gcc版本是gcc version 4.1.2,报错的gcc版本是gcc version 3.4.6继续搜索,发现pthread_rwlock_t 在pthreadtypes.h文件中有定义:...#if defined __USE_UNIX98 || defined __USE_XOPEN2K/* Functions for ha 阅读全文
posted @ 2011-07-19 16:18 夏大王 阅读(1150) 评论(0) 推荐(0)
摘要:error: storage class specified for parameter今天编译时,出现error: storage class specified for parameter问题一下子出现了很多错误;最后,发现是新增的头文件中,最后一个函数的声明缺少一个";“ 引起这个错误虽然很小,但检查起来不是很容易,主要原因我觉得还是gcc做语法检查的时候进行了过多的错误处理,忽略了识别不了的token,这样错误被累计导致产生这个报警信息。后续需要注意 阅读全文
posted @ 2011-07-02 13:03 夏大王 阅读(6005) 评论(0) 推荐(0)
摘要:作为一个Linux系统下的C程序员,你可能发现调试程序是个比较麻烦的工作,虽然已经有gdb,kgdb等专业的调试软件,但如果对这些软件运用不熟练是根本达不到调试程序找出bug的目的的。又或者你对gdb已经很熟了,但运行gdb开始调试后在哪里设置断点成了你头痛的问题?当然,你可以从程序开始就以单步运行step by step来调试程序,但这会耗去你很多时间。如果你能很好地跟踪并记录程序的运行情况,那么一切将变得简单。下面我以一个实例说明我是如何操作的:首先我有一个程序主体main,其代码如下://////////////////////////////trace.c 开始//////////// 阅读全文
posted @ 2011-03-11 17:58 夏大王 阅读(252) 评论(0) 推荐(0)
摘要:静态函数库: 这类库的名字一般是libxxx.a;利用静态函数库编译成的文件比较大,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了。当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译。 动态函数库: 这类库的名字一般是libxxx.so;相对于静态函数库,动态函数库在编译的时候并没有被编译进目标代码中,你的程序执行到相关函数时才调用该函数库里的相应函数,因此动态函数库所产生的可执行文件比较小。由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运. 阅读全文
posted @ 2011-03-11 16:52 夏大王 阅读(347) 评论(0) 推荐(0)
摘要:在源码中,宏likely和unlikely 是这么定义的(位于include/linux/compiler.h):#define likely(x)__builtin_expect(!!(x), 1)#define unlikely(x)__builtin_expect(!!(x), 0)要理解宏likely和unlikely ,很明显必须理解__builtin_expect。__builtin_expect是GCC(version>=2.9)引进的宏,其作用就是帮助编译器判断条件跳转的预期值,避免跳转造成时间浪费。拿下面的代码来说:if (likely(acat == 1)) //表示 阅读全文
posted @ 2011-02-16 11:02 夏大王 阅读(1771) 评论(0) 推荐(0)