2013-07-24 179 views
6

我在编译我的代码时遇到这些错误。我都下用户头/包括编译时出错?

g++ -Ip_appmanager/inc -Icore/inc p_appmanager/src/appmanager_process.cpp -o p_appmanager/obj/appmanager -lpthread -lparser 
p_appmanager/src/appmanager_process.cpp: In function ‘int main(int, char**)’: 
p_appmanager/src/appmanager_process.cpp:33:21: error: ‘getpid’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp:101:19: error: ‘fork’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp:105:70: error: ‘execl’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp:109:19: error: ‘getppid’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp:124:19: error: ‘fork’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp:128:61: error: ‘execl’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp:132:19: error: ‘getppid’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp:147:19: error: ‘fork’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp:151:73: error: ‘execl’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp:155:19: error: ‘getppid’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp:170:19: error: ‘fork’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp:175:70: error: ‘execl’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp:179:19: error: ‘getppid’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp: In function ‘void* pingThread(void*)’: 
p_appmanager/src/appmanager_process.cpp:302:11: error: ‘sleep’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp: In function ‘void* fifoThread(void*)’: 
p_appmanager/src/appmanager_process.cpp:815:22: error: ‘fork’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp:818:72: error: ‘execl’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp:842:64: error: ‘execl’ was not declared in this scope 
p_appmanager/src/appmanager_process.cpp:865:72: error: ‘execl’ was not declared in this scope 
make: *** [all] Error 1 

我的内核版本是“Linux的阿米特 - bhaira 3.8.0-26泛型#38,Ubuntu的SMP周一6月17日21时46分08秒UTC 2013 i686的的i686 i686的GNU/Linux“。相同的代码在另一台linux机器上运行。

请帮我解决这个问题。

谢谢。

+0

是您的代码,包括? –

+1

你是否诚实地相信我们可以神奇地解决你的编译器错误而不看代码? – 2013-07-24 14:31:23

+1

@ H2CO3:对于*那些*特定的,是的。 –

回答

40

添加#include <unistd.h>

它适用于其他平台,因为它们与旧版本,在某些系统头不小心unistd.h中包括GCC(< 4.7)的编制。

2

您忘记了您的程序中的#include <unistd.h>

+0

不,我没有,我已经提到相同的代码在另一台Linux机器上运行。 –

+1

它可能被其他头文件吸引 - 这确实发生。由于你的代码有意使用诸如'fork'和'execl'之类的东西,你应该自己包含它,而不要依赖它被间接包含。 –

6

fork(2)手册页:

SYNOPSIS 
     #include <unistd.h> 

exec(3)手册页:

SYNOPSIS 
     #include <unistd.h> 

getpid(2)手册页:

SYNOPSIS 
     #include <sys/types.h> 
     #include <unistd.h> 

sleep(3)手册页:

SYNOPSIS 
     #include <unistd.h>