2012-10-02 37 views
0

我想使用Visual Studio Express爲Windows創建PHP擴展。我從頭開始擴展,只有test.cpp文件,我寫了一些代碼。雖然代碼編譯和運行良好,但是在編譯過程中產生了一些警告,我寧願刪除它。編譯PHP擴展 - 如何擺脫「putwchar()不一致的dll鏈接」警告

我的文件減少到一個單一的線,再現了這些警告:

#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作者的意圖 - 我應該有進口或聲明爲inline那些 getwchar()putwchar()功能? stdio.h試圖同時做到這一點。
  2. 我錯過了一些預處理指令來設置?
  3. 我是否必須包含一些來自PHP源代碼的特定於win32的頭文件?
+0

嘗試添加'/ P'選項(「Preprocessor/Preprocess to a File」IDE項目選項),然後在創建的'filename.s'文件中搜索'getwchar'由構建。這應該給你一個說明,聲明和導致問題的'inline'定義有什麼不同。一旦我們知道這一點,我們就有機會找出如何解決這個問題。 –

+0

此外,它可能有助於發佈構建日誌文件(不要從構建輸出IDE窗口粘貼 - 出於某種原因,構建輸出窗口會過濾掉重要信息,如使用的實際命令行)。 –

+0

謝謝@MichaelBurr--那並沒有多大幫助,但是最後我發現原因 –

回答

-1

最後,我設法找到了問題 - 這是的.cpp延長,這引起了文件編譯爲C++,而PHP是寫在普通C.

最簡單的解決方法是隻是爲了重命名文件有.c擴展名。當然,用C編寫源代碼。

+3

「在C中編程」不是一個解決方案,是嗎? – 2013-04-16 10:56:23