编译PHP扩展 - 如何摆脱“putwchar()不一致的dll链接”警告

时间:2012-10-02 00:57:43

标签: php c visual-studio php-extension stdio

我正在尝试使用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的头文件?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

最终我设法找到了问题 - 这是 .cpp 扩展名,这导致文件被编译为C ++,而PHP则是用简单的C语言编写的。

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