2011-11-05 21 views
0

我使用cywin編譯windows上的crashme源代碼,我正面臨一些編譯錯誤。不兼容的編譯錯誤內置函數'execl'

錯誤:

crashme.c: In function 'vfork_main': 
crashme.c:594: warning: incompatible implicit declaration of built-in function ‘execl’ 

雖然源代碼已經包含unistd.h中,但仍然堅持錯誤。請幫助我如何解決這個問題。

回答

2

可能是一個缺少「系統」 的#include頭限定execl(即在Linux <unistd.h>)。

要了解包含的內容,請使用gcc -H -c foo.c並使用gcc -C -E -Wall foo.c > foo.i獲取預處理表單。

+0

我已經在/ usr/include下面檢查過了,頭文件在那裏.. – msk

+0

按照上面的解釋獲取預處理過的表單,並查看它(在那裏搜索'execl')。 –

+0

@ user1031345等一下,通過檢查/ usr/include下的內容,你的意思是說頭文件在那個目錄中,或者你檢查過你的_code_'#include's那個頭文件嗎? – Arkku

1

來源不包含包含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下開展這項工作需要花費大量精力。

+0

謝謝Thomspson,我會嘗試通過註釋ifdef/endif行來進行編譯。 – msk

0

我最近更新了http://crashme.codeplex.com/源代碼,使用Xcode命令行工具在Mac OS X Lion上工作,並進行了更改,使其在64位x64體系結構上更加有效。但在Windows下,我會建議使用本地Windows端口而不是cygwin,使用預編譯的Windows安裝程序msi文件。您可以在codeplex網站上報告錯誤/問題。