0

我正在尝试使用 Visual Studio Express 为 Windows 创建一个 PHP 扩展。我从头开始扩展并且只有test.cpp文件,我在其中编写了一些代码。尽管代码编译并运行良好,但在编译期间它产生了几个警告,我宁愿摆脱。

我将文件减少到一行,它重现了这些警告:

#include "php.h"

构建这样一个空的 DLL 我得到:

>Compiling...
>test.cpp
>C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(620) : warning C4273: 'getwchar' : inconsistent dll linkage
>        C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(435) : see previous definition of 'getwchar'
>C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(622) : warning C4273: 'putwchar' : inconsistent dll linkage
>        C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(437) : see previous definition of 'putwchar'

解决这两个警告的正确方法是什么?

我试图调查这个问题,并检查我是否忘记了一些预处理器指令。但我找不到任何适用于stdio.h适当影响的东西。

这是我在项目配置中设置的预处理器指令列表:

WIN32
NDEBUG
_WINDOWS
_USRDLL
TEST_EXPORTS
PHP_WIN32
ZEND_WIN32
ZTS=1
ZEND_DEBUG=0

Inherited values:
_WINDLL
_UNICODE
UNICODE

它看起来与其他 PHP 项目非常相似。我也研究了stdio.h,但没有找到合适的预处理器指令来设置。

因此,主要问题分为较小的问题:

  1. PHP 作者的意图是什么——我应该将这些 函数getwchar()putwchar()函数导入还是内联声明?stdio.h试图同时做到这一点。
  2. 我错过了一些要设置的预处理器指令吗?
  3. 我是否必须从 PHP 源中包含一些特定于 win32 的头文件?
4

2 回答 2

0

我解决它添加 math.h 和 wchar.h 看到https://jojokahanding.wordpress.com/tag/php-extension/以获得更好的解释

于 2019-04-17T20:49:15.647 回答
-1

最终我设法找到了问题 - 那是.cpp扩展名,它导致文件被编译为 C++,而 PHP 是用纯 C 编写的。

最简单的解决方案是将文件重命名为具有.c扩展名。而且,当然,用 C 编写源代码。

于 2013-02-03T18:32:36.497 回答