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

原创 2015年07月07日 11:13:26

问题:我在用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"


解决PHP中函数重复定义的问题

在本地运行正常的PHP代码,放到空间上就出现 Fatal error: Cannot redeclare  的问题. 查看了一下原来是函数重定义了. 网上说用require_once就可以解决了....
  • ImGoTop
  • ImGoTop
  • 2009年12月08日 06:04
  • 2048

MySQL命令整理

1.可以使用多种方式连接上数据库 2.在进行数据库操作之前,需要先选择数据库,这个在命令行需要单独输入use *命令,但是在java中,在第一步中已经选择好数据库了 3.Mysql命令集合 $: s...

C#如何将byte[]写入文件的方法和注意的问题

解决: File.WriteAllBytes http://msdn.microsoft.com/zh-cn/library/system.io.file.writeallbytes.aspx ...

类定义时防止 'class' type redefinition

Vc++ 若出现这样的错误提示,'class'  type redefinition,请参照本文 这个错误是因为“头文件被重复包含造成类被重复定义”防止出现可以用 'class' typ...
  • wdt3385
  • wdt3385
  • 2012年07月05日 15:07
  • 584

c++模板函数文件组织,避免redefinition of 错误

很渴望发现同样喜欢c、c++、linux编程的朋友,可以互相学习,交流经验,我自己创建了一个qq群,欢迎你的加入:284635371 首先说一下本贴要解决的问题: 1、模板函数的文件组织。 2、解决...

基于 dbms_redefinition 在线重定义表

Oracle 支持在线重定义表,也就是说我们可以在修改表结构(DDL)的同时进行相关的DQL、DML操作,使得前端的DML根本感觉不到表结构实际上已经发生了变化,对于用户而言是完全透明的。当然在线重定...

Oracle在线重定义DBMS_REDEFINITION 普通表—>分区表

转载至http://www.cnblogs.com/jyzhao/p/3876634.html 实验环境:RHEL 6.4 + Oracle 11.2.0.3 实验:在线重定义 普通表 为...
  • vic_qxz
  • vic_qxz
  • 2016年10月22日 17:32
  • 299

在线重定义表(dbms_redefinition)

在线重定义表(dbms_redefinition) Oracle9i开始引入在线重定义表(Redefine Tables Online)的功能,通过调用dbms_redefinition包,可以在修改...

联机重定义(Online Redefinition)浅析

--联机重定义(Online Redefinition)浅析 --用途: 1.Modify the storage parameters of a table or cluster 2.Mov...

使用DBMS_REDEFINITION在线重定义分区表

创建一个非分区表,注意两个表的表结构和字段类型一致. SQL> CREATE TABLE tab_unpart 2 ( 3 col1 varchar2(30), 4 col2 DATE 5 ); ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用C++扩展php时函数重定义redefinition问题
举报原因:
原因补充:

(最多只允许输入30个字)