我使用cywin編譯windows上的crashme源代碼,我正面臨一些編譯錯誤。不兼容的編譯錯誤內置函數'execl'
錯誤:
crashme.c: In function 'vfork_main':
crashme.c:594: warning: incompatible implicit declaration of built-in function ‘execl’
雖然源代碼已經包含unistd.h中,但仍然堅持錯誤。請幫助我如何解決這個問題。
我使用cywin編譯windows上的crashme源代碼,我正面臨一些編譯錯誤。不兼容的編譯錯誤內置函數'execl'
錯誤:
crashme.c: In function 'vfork_main':
crashme.c:594: warning: incompatible implicit declaration of built-in function ‘execl’
雖然源代碼已經包含unistd.h中,但仍然堅持錯誤。請幫助我如何解決這個問題。
可能是一個缺少「系統」 的#include
頭限定execl
(即在Linux <unistd.h>
)。
要了解包含的內容,請使用gcc -H -c foo.c
並使用gcc -C -E -Wall foo.c > foo.i
獲取預處理表單。
來源不包含包含unistd.h
。
我無法打開crashme.zip
,但我能夠部分解壓縮crashme.tgz
。
crashme.c
有以下兩行(150-152):
#ifdef linux
#include <unistd.h>
#endif
你正在編譯在Cygwin,這是不 Linux系統,所以當然的象徵linux
沒有定義。結果,#include <unistd.h>
被跳過。
令人驚訝的是,因爲<unistd.h>
應該可以在所有類Unix(即POSIX)系統上使用,而不僅僅是Linux - 並且源代碼中的註釋表明它已在SunOS 4.1.1和其他幾個Unix系統上使用。
註釋掉#ifdef linux
和#endif
行應該解決眼前的問題,但我不知道可能潛藏在其中的其他問題是什麼。在Cygwin下開展這項工作需要花費大量精力。
謝謝Thomspson,我會嘗試通過註釋ifdef/endif行來進行編譯。 – msk
我最近更新了http://crashme.codeplex.com/源代碼,使用Xcode命令行工具在Mac OS X Lion上工作,並進行了更改,使其在64位x64體系結構上更加有效。但在Windows下,我會建議使用本地Windows端口而不是cygwin,使用預編譯的Windows安裝程序msi文件。您可以在codeplex網站上報告錯誤/問題。
我已經在/ usr/include下面檢查過了,頭文件在那裏.. – msk
按照上面的解釋獲取預處理過的表單,並查看它(在那裏搜索'execl')。 –
@ user1031345等一下,通過檢查/ usr/include下的內容,你的意思是說頭文件在那個目錄中,或者你檢查過你的_code_'#include's那個頭文件嗎? – Arkku