Maverick

never stop thinking

用C++扩展php时函数重定义redefinition问题

问题:我在用C++扩展php时,用到了一些数学库函数如sqr,sqrt等,需要在C++扩展工程的源文件test.cpp中#include <math.h>,但是编译时发现这些函数出现了重定义redefinition的问题。

多次尝试后,发现将test.cpp开头的#include "php.h" 去掉时,就没有这个问题了


原因:查询得知,因为php.h中,将很多C++库函数做了inline内联,直接定义在php.h,导致在C++库函数文件stdio.h中的同名函数定义识别为重定义(inline修饰的函数不允许在其他文件定义)


解决:将有重定义函数的C++头文件#include写在#include ”php.h“之前,屏蔽inline函数,在test.cpp中的位置如下:

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

<strong>#include <stdio.h>
#include <string.h>
#include <math.h>
#include <map>
#include <vector>
#include <set>
#include <queue></strong>

#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "php_NearestNeighbors.h"


阅读更多
个人分类: C++ php
上一篇在Linux下用C扩展PHP(打包成so)的方法
下一篇PHP调用C++扩展时memset/sizeof函数无效的问题
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭