"pthread库未定义引用"
"pthread库未定义引用"
这个问题已经有了答案:
我在Fedora 17上使用带有GCC的eclipse,在gcc构建命令行上加入-lpthread,即使pthread.h已经包括,我还是会在pthread_create()上有一个未定义的引用...
这是我的代码,以防万一
void* repair() { int var; for ( var = 0; var < NB_ITER ; var += 2 ) { printf( "PAIR : %d\n", var ); } return NULL; } // pair void exo03() { pthread_t id1; pthread_create(&id1, NULL, &repair, NULL); }
谢谢您的帮助 🙂
在Linux、FreeBSD(和其他一些*nix版本)上,您应该使用编译器选项-pthread
而不是尝试链接pthread库。\n对于Eclipse:\nEclipse未配置将-pthread参数放入gcc编译中。要解决此问题,请执行以下操作:\n项目->属性\nC/C++建设->GCC C编译器->杂项\n在“其他标志”的开头添加“-pthread”参数\n同样进入:\nc/c++ build->设置->GCC C链接器->库\n并将“pthread”库包含在其他库中。单击应用并重建该项目。 Pthreads现在必须工作。\n从GCC手册中获取:\n-pthread:添加对使用pthread库进行多线程支持的支持。此选项为预处理器和链接器设置标志。\n我在这里找到了一个解释:\n在GCC中,-pthread(也称为-pthreads)选项管理编译器预处理器/和/链接器以启用使用Posix线程的编译。预处理器将定义/启用/使用某些宏的Posix线程版本(或执行条件编译以启用Posix线程逻辑),而链接器将特定地将结果对象与libpthread链接。\n但是,-lpthread仅告诉链接器尝试解析所有外部引用以针对libpthread库,就像-lm告诉链接器尝试解析所有外部引用以针对libm库一样。对于-lpthread,即使您编写了Posix线程代码,您的代码也可能不包含对libpthread的外部引用,因为关键宏尚未打开。