一般来说,如果库的头文件不在 /usr/include 目录中,那么在编译的时候需要用 -I 参数指定其路径。由于同一个库在不同系统上可能位于不同的目录下,用户安装库的时候也可以将库安装在不同的目录下,所以即使使用同一个库,由于库的路径的不同,造成了用 -I 参数指定的头文件的路径也可能不同,其结果就是造成了编译命令界面的不统一。如果使用 -L 参数,也会造成连接界面的不统一。编译和连接界面不统一会为库的使用带来麻烦。
为了解决编译和连接界面不统一的问题,人们找到了一些解决办法。其基本思想就是:事先把库的位置信息等保存起来,需要的时候再通过特定的工具将其中有用的 信息提取出来供编译和连接使用。这样,就可以做到编译和连接界面的一致性。其中,目前最为常用的库信息提取工具就是下面介绍的 pkg-config…
作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了.
在本文中,将给大家介绍如何使用autoconf和automake两个工具来帮助我们自动地生成符合自由软件惯例的 Makefile,这样就可以象常见的 GNU程序一样,只要使用”./configure”,”make”,”make instal”就可以把程序安装到Linux系统中去了.
这将特别适合想做开放源代码软件的程序开发人员,又或如果你只是自己写些小的Toy程序,那么这个文章对你也会有很大的帮助.
转自:http://www.linuxcomputer.cn/jishuwendang/xinshourumen/200902/03-3029.html
原文地址:http://hi.baidu.com/yzkuang/blog/item/557e4f24423d8136c9955908.html
做为我以后乱写的一个指导方针。呵呵
PHP 源代码分析目录
1. 第一章 构建系统 准备工具、库及需要具备的基础知识;
2. 如何编译不同平台的版本?编译时的各个选项是什么含义?
3. 如何创建一个 PHP 扩展/模块?如何创建一个 Zend 扩展?
4. 如何调试 PHP?如何调试 PHP/Zend 扩展?
1. 第二章 PHP 与 SAPI 的生命周期 脚本的运行周期
2. 模块/脚本的起始与终止函数; …
刚刚在PHP群内和大家聊天,应承了大家要写一个关于如何实现PHP源码加密的文章, 借着这会QA在冒烟的机会,就这个问题,我写点思路….
SAPI: Server abstraction API,研究过PHP架构的同学应该知道这个东东的重要性,它提供了一个接口,使得PHP可以和其他应用进行交互数据。 本文不会详细介绍PHP的每个SAPI,只是针对最简单的CGI SAPI,来说明SAPI的机制…
作者: laruence(http://www.laruence.com)
本文地址: http://www.laruence.com/2008/04/18/104.html
转载请注明出处
cT=”0″;nc=”#444444″;nBgc=”";nBorder=”#196FCB”;tc=”#FFFFFF”;tBgc=”#19A1FE”;tBorder=”#196FCB”;tDigg=”%E6%8E%A8%E8%8D%90″;tDugg=”%E5%B7%B2%E8%8D%90″;defaultItemUrl=”WEB_URL”;defaultFeedUrl =”http://www.laruence.com/feed”;
1. bool isBigEnding()…{
int i = 1;
return ((char)i) == 1;
}
2. bool isBigEnding()…{
union …{
int i;
char c;
}x=…{1};
return x.c == 1;
}
3. bool isBigEnding…{
union …{
int i ;
struct …{
unsigned short int b : 8;
}bit;
}x=…{1};
return x.bit.b == 1;
}
还是那个关于开发安全签名的PHP模块, 今天将它包装成一个PHP的CLASS,也同样,网上的资料少之甚少,于是我想将经验写一篇,关于如何在Extension Module中创建一个可以被PHP访问的对象的文章。 和大家分享。
还是和论文相关,要编写一个Apache的模块,挂在post read_request阶段,在第一时间,判断一个链接是否是而已连接请求,并在第一时间拒绝恶意连接请求。
首先遇到的第一个问题,就是需要从http.conf中读取配置信息,提供俩个配置指令,MaxNumber, TimeRange.指定在一段时间内的连接次数上限。
编写的时候,遇到的第一个问题就是,moudule申明,不能通过编译,编译器提示重复定义。查了N遍手边的apache源码分析,也没有找到原因,如: ……..
signal(int sig, void(*func)(int))是信号注册函数。它可以定制对于特定的信号(sig)的处理函数。
昨天偶然看到他的申明式的时候,把我搞的有点糊涂
#include
void(*signal(int signo, void(*func)(int)))(int);
仔细理解了半天,终于搞清楚了它的定义式,也解开了我长期以来的一个误区:
1. void(*func)(int):
定义了一个函数指针,他的类型是,指向一个返回是void,参数的int的函数类型的指针,就好像 int i, 定义了一个可以存储int型的变量的i。
2. 由上,signal的定义可以如下解释。
signal(int signo, void(*func)(int));
定义了,signal函数接受俩个参数一个是int signo,一个是一个回调的函数指针。
void(* signal(….))(int);
定义了,signal的返回类型是一个函数指针,指向一个返回空的,接受一个整形参数(信号值)的函数;
这么解释,就好多了,再看看简化的定义式,就更明白了(Plauger 1992):
typedef void sigfunc(int);
sigfunc *signal(int, sigfunc *);
由此,我结合fork进行了一番试验, 来验证,子进程是否既成父进程的信号处理函数……