我想使用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
,但沒有找到適當的預處理器指令來設置。
所以,主要的問題劃分成更小的問題:
- 什麼是PHP作者的意圖 - 我應該有進口或聲明爲inline那些
getwchar()
和putwchar()
功能?stdio.h
試圖同時做到這一點。 - 我錯過了一些預處理指令來設置?
- 我是否必須包含一些來自PHP源代碼的特定於win32的頭文件?
嘗試添加'/ P'選項(「Preprocessor/Preprocess to a File」IDE項目選項),然後在創建的'filename.s'文件中搜索'getwchar'由構建。這應該給你一個說明,聲明和導致問題的'inline'定義有什麼不同。一旦我們知道這一點,我們就有機會找出如何解決這個問題。 –
此外,它可能有助於發佈構建日誌文件(不要從構建輸出IDE窗口粘貼 - 出於某種原因,構建輸出窗口會過濾掉重要信息,如使用的實際命令行)。 –
謝謝@MichaelBurr--那並沒有多大幫助,但是最後我發現原因 –