我正在尝试使用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
,但没有找到合适的预处理器指令来设置。
因此,主要问题分为较小的问题:
getwchar()
和putwchar()
函数导入或声明为内联? stdio.h
试图同时这样做。我解决了添加math.h和wchar.h的问题,请参阅https://jojokahanding.wordpress.com/tag/php-extension/以获得更好的解释
最终我设法找到了问题 - 这是.cpp扩展名,导致文件被编译为C ++,而PHP是用简单的C语言编写的。
最简单的解决方案是将文件重命名为.c扩展名。当然,在C中写入源代码。