2012-01-06 9 views
10

Cóż, to musi być głupie. Poniżej znajduje się kod "nie może być prostszy" w C. Nie można skompilować, mówiąc "nieokreślone odniesienie do snu". Ale myślę, że to wszystko nagłówek systemu muszę ...Niezdefiniowane odniesienie do "uśpienia", ale zawierałem <unistd.h>

#include <stdio.h> 
#include <unistd.h> 
int main() 
{ 
    printf("Test starts.\n"); 
    sleep(1); 
    printf("Test ends.\n"); 

    return 1; 
} 
+3

"Niezdefiniowana referencja" brzmi, jakby nie zawierała linku do czegoś, czego potrzebuje. – Kevin

+1

OS/kompilator? Czy może być więcej kodu niż z literówką? To kompiluje i łączy się z gcc 4.6.1. – JoeFish

+0

@MengfeiMurphy, jakiego kompilatora używasz? Jakiej linii poleceń piszesz, aby ją skompilować? Powiedz nam wszystko, co możesz. –

Odpowiedz

33

Spróbuj tego na górze:

#ifdef __unix__ 
# include <unistd.h> 
#elif defined _WIN32 
# include <windows.h> 
#define sleep(x) Sleep(1000 * x) 
#endif 

Ten kod pozwoli Ci korzystać z dwóch różnych funkcje pod tą samą nazwą, które robią całkiem to samo. I kompiluje się na różnych platformach.

+0

Cudownie! Masz cholerną rację! Używam Win7 + 'WinGW'. Po raz pierwszy spotykam się z przenośnymi problemami w praktyce. Czy masz jakieś inne podobne przykłady? –

+0

Właściwie to nie przychodzi mi do głowy, ale możesz zrobić wiele rzeczy w ten sposób. Jest czysty i prosty. – wazabit

+0

to faktycznie działa, poza moimi problemami z flagami w blokach kodu, mogę teraz uruchomić kod, który zrobiłem na systemie Linux w Windows dzięki temu nagłówkowi – thinksinbinary

-2

Według Podręcznika programisty Linuksa, wszystko czego potrzebujesz to unistd.h dostać sen do pracy. Sprawdź, czy Twoje ścieżki dostępu są poprawnie skonfigurowane. Btw, jeśli używasz systemu Windows, które nie wyglądają jak u używasz, można użyć uśpienia poprzez włączenie windows.h

2

Jeśli pracujesz w systemie operacyjnym Windows, dołącz plik nagłówkowy windows.h do swojego programu i zmień sleep() na Sleep().

Problem zniknie.

Mam nadzieję, że to pomoże.

+0

Funkcja "uśpienia()" systemu Windows jest w milisekundach, podczas gdy * Nix's 'sleep()' jest w sekundach. Odpowiednikiem * NIX 'Sleep()' jest 'usleep()'. Zobacz odpowiedź Wazabit dla poprawnego sposobu tworzenia kodu korzystającego z 'sleep()' portable. –

Powiązane problemy