用c++来开发php的底层模块|用c++来开发apache模块,Apache模块开发实例(2)
三、常見問題
1、常見錯誤
apxs:Error: Sorry, cannot determine bootstrap symbol name. apxs:Error: Please specify one with option `-n'.
加個-n參數(shù),給模塊起個名字
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++參數(shù)。-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/
參數(shù)說明:
-I/usr/include/mysql/表示到該目錄下找mysql相關頭文件
-lmysqlclient表示鏈接時,必須把libmysqlclient庫也鏈接進來,否則編譯通過,但是Apache會提示mysql相關函數(shù)未定義錯誤。
3、apxs2編譯c++文件
如果編譯C++文件,也必須改名為.c文件,然后類似如下方法(示例為只編譯不安裝):
apxs2 -ac -S CC=g++ -I../ calcserver.c
如需更多參數(shù)可以一并附加到apxs2后面,比如 -I/usr/local/include -lmylib -L/usr/local/lib/mydir
4、幾個常見變量
獲取客戶端IP
r->connection->remote_ip
獲取COOKIE
r->headers_in
獲取URL參數(shù)
總結
以上是生活随笔為你收集整理的用c++来开发php的底层模块|用c++来开发apache模块,Apache模块开发实例(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php二叉树广度插入数据,php-如何在
- 下一篇: 民生银行预审算通过吗