2011-09-17 94 views
1

我想在包含fork和wait的cygwin中運行一個簡單的程序。 我認爲這將是非常容易編譯,但我有問題。在cygwin中使用fork編譯程序的問題

#include <stdio.h> 
#include <unistd.h> 

void testFork(){} 

int main(int argc,char* argv[]){ 

    if (fork()==0) {testFork();return 0;} 
    while (wait() == -1); 
    return 0; 
} 

使用編譯: 的gcc -Wall -o -Wextra測試test.o

我得到以下錯誤:

C:\Users\Aaron\AppData\Local\Temp\ccgh3MfS.o:ostest.c:(.text+0x11): undefined reference to `fork' 
C:\Users\Aaron\AppData\Local\Temp\ccgh3MfS.o:ostest.c:(.text+0x22): undefined reference to `wait' 
collect2: ld returned 1 exit status 

我敢肯定,我失去了一些東西微不足道。有任何想法嗎?

回答

2

鏈接器找不到標準C庫。

你以正常的方式安裝Cygwin嗎? (這裏有一個簡單的指南:http://www.eecg.utoronto.ca/~aamodt/ece242/cygwin.html)。

你去過能夠編譯更簡單的方案:

#include <stdio.h> 

int main(int argc, char **argv) { 
    printf("Found C library.\n"); 
} 

如果沒有編譯,你可能只是想嘗試刪除並重新安裝Cygwin的 - 這是壞了。

+0

沒有叉,等待一切編譯GCC調用"cygcheck -c"很好 – twerdster

+2

你確定你在使用Cygwin gcc嗎?你有沒有安裝任何其他軟件,可能已經將gcc放在你的Windows CMD路徑中(我特別想到MinGW,它沒有fork()和wait()函數可用)。 – dvorak

+1

謝謝dvorak。這是問題的一部分。 – twerdster

0

C:\Users\Aaron\AppData\Local\Temp\ccgh3MfS.o是一種Windows風格的路徑。如果你使用的是Cygwin,你只能看到Cygwin風格的路徑,可能類似於/cygdrive/C/Users/Aaron/AppData/Local/Temp/ccgh3MfS.o

你說你的命令行是

gcc -Wall -Wextra -o test.o test 

但它可能是

gcc -Wall -Wextra -o test.o test.c 

是指您在Cygwin的命令行調用gcc的? type gcc說什麼?

0

看來MinGW gcc正在被調用,因爲cygwin gcc包沒有安裝。

您可以驗證通過在cygwin命令行,將列出所有已安裝的軟件包,如果你不能在列表中找到你需要安裝它