我最近安装了 XUbuntu 11.10 64 位,但在编译最简单的 pthread 示例时遇到问题。
这是代码pthread_simple.c
:
#include <stdio.h>
#include <pthread.h>
main() {
pthread_t f2_thread, f1_thread;
void *f2(), *f1();
int i1,i2;
i1 = 1;
i2 = 2;
pthread_create(&f1_thread,NULL,f1,&i1);
pthread_create(&f2_thread,NULL,f2,&i2);
pthread_join(f1_thread,NULL);
pthread_join(f2_thread,NULL);
}
void *f1(int *x){
int i;
i = *x;
sleep(1);
printf("f1: %d",i);
pthread_exit(0);
}
void *f2(int *x){
int i;
i = *x;
sleep(1);
printf("f2: %d",i);
pthread_exit(0);
}
这是编译命令
gcc -lpthread pthread_simple.c
结果:
lptang@tlp-linux:~/test/test-pthread$ gcc -lpthread pthread_simple.c /tmp/ccmV0LdM.o:在函数“main”中: pthread_simple.c:(.text+0x2c): 对“pthread_create”的未定义引用 pthread_simple.c:(.text+0x46): 对“pthread_create”的未定义引用 pthread_simple.c:(.text+0x57): 对“pthread_join”的未定义引用 pthread_simple.c:(.text+0x68): 对“pthread_join”的未定义引用 Collect2: ld 返回 1 退出状态
有谁知道导致问题的原因是什么?
答案1
在最新版本的gcc
编译器中,要求库遵循对象或源文件。
所以编译它应该是:
gcc pthread_sample.c -lpthread
通常,pthread 代码是这样编译的:
gcc -pthread pthread_sample.c
答案2
gcc -o exectable_namme pthread_sample.c -lpthread
答案3
使用以下命令编译代码
gcc filename.c -lpthread -lrt