用c++来开发php的底层模块|用c++来开发apache模块,Apache模块开发实例(2)

三、常见问题

1、常见错误

apxs:Error: Sorry, cannot determine bootstrap symbol name. apxs:Error: Please specify one with option `-n'.

加个-n参数,给模块起个名字

apxs2 -iacn mod_helloworld.cpp ./mod_helloworld.so

2、带库模块的编译

a、库编译仍然采用gcc或g++,结果为libfun.so(示例),比如:

标准C:gcc -shared fun.cpp -o libfun.so

C++:g++ -shared fun.cpp -o libfun.so

带MYSQL: g++ -shared student.cpp fun.cpp -I/usr/include/mysql/ -lmysqlclient -lm -o libfun.so

合并C++:g++ -shared fun1.cpp fun2.cpp -o libfun.so

b、编译APACHE c模块文件方法如下:

apxs2 -ica -L./ -lfun test.c -Wl,-rpath=/root/

如果是C++文件,添加-S CC=g++参数。-WL,-rpath=/root/表示APACHE运行时需加载libfun.so的放置目录。

该设置可以通过ldd test.so查看,结果如下:

root@ubuntu:~# ldd test.so

linux-gate.so.1 =>  (0x00a32000)

libfun.so => /root/libfun.so (0x0018e000)

如果编译时需包含MYSQL,只需确认MYSQl.h的头文件位置,然后添加-I/usr/include/mysql/编译选项。示例如:

apxs2 -c -L./ -I/usr/include/mysql/ -lmysqlclient -lfun test.c -Wl,-rpath=/root/

参数说明:

-I/usr/include/mysql/表示到该目录下找mysql相关头文件

-lmysqlclient表示链接时,必须把libmysqlclient库也链接进来,否则编译通过,但是Apache会提示mysql相关函数未定义错误。

3、apxs2编译c++文件

如果编译C++文件,也必须改名为.c文件,然后类似如下方法(示例为只编译不安装):

apxs2 -ac -S CC=g++ -I../ calcserver.c

如需更多参数可以一并附加到apxs2后面,比如 -I/usr/local/include -lmylib -L/usr/local/lib/mydir

4、几个常见变量

获取客户端IP

r->connection->remote_ip

获取COOKIE

r->headers_in

获取URL参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值