多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 19.2 构建并编译一个宿主应用 # 构建并编译一个宿主应用 究其本质而言, 库只是⼀个没有目的的代码集合. 为了让它工作, 你需要用以嵌入php 的应用. 首先, 我们来封装⼀个非常简单的应用, 它启动Zend引擎并初始化PHP处理⼀个请求, 接着就回头进行资源的清理. ``` #include <sapi/embed/php_embed.h> int main(int argc, char *argv[]) { PHP_EMBED_START_BLOCK(argc,argv) PHP_EMBED_END_BLOCK() return 0; } ``` 由于这涉及到了很多头文件, 构建实际上需要的时间要长于这么小的代码片段通常需 要的时间. 如果你使用了不同于默认路径(/usr/local)的PREFIX, 请确认以下面的方式指定 路径: ``` gcc -I /usr/local/php-dev/include/php/ \ -I /usr/local/php-dev/include/php/main/ \ -I /usr/local/php-dev/include/php/Zend/ \ -I /usr/local/php-dev/include/php/TSRM/ \ -lphp5 \ -o embed1 embed1.c ``` 由于这个命令每次输入都很麻烦, 你可能更原意用一个简单的Makefile替代: ``` CC = gcc CFLAGS = -c \ -I /usr/local/php-dev/include/php/ \ -I /usr/local/php-dev/include/php/main/ \ -I /usr/local/php-dev/include/php/Zend/ \ -I /usr/local/php-dev/include/php/TSRM/ \ -Wall -g LDFLAGS = -lphp5 all: embed1.c $(CC) -o embed1.o embed1.c $(CFLAGS) $(CC) -o embed1 embed1.o $(LDFLAGS) ``` 这个Makefile和前面提供的命令有⼀些重要的区别. 首先, 它用-Wall开关打开了编译期的警 告, 并且用-g打开了调试信息. 此外它将编译和链接两个阶段分为了两个独立的阶段, 这样在后期 增加更多源文件的时候就相对容易. 请自己重新组着这个Makefile, 不过这里用于对齐的是Tab(水 平制表符)而不是空格. 现在, 你对embed1.c源文件做修改后, 只需要执行⼀一个make命令就可以构建出新的 embed1可执行程序了. ## links - [目录](preface.md) - 19.1 [嵌入式SAPI](19.1.html) - 19.3 [通过嵌入包装重新创建cli](19.3.html)