使用pthread编译/链接错误 [英] Compile/link error using pthread

查看:216
本文介绍了使用pthread编译/链接错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试编写一个小程序,该程序使用线程对数组进行排序,但无法在线程支持下进行编译.

I try to make a little program that sorts an array using threads but I can't get it to compile with the thread support.

错误:

sortieren.c:(.text+0xd7): undefined reference to `ptread_create'

我使用了make文件来简化编译,但是在命令行上我也无法使它正常工作.

I used a make file for easy compiling but also on command line I can't get it to work.

基本代码:

#include <pthread.h>
int main(int argc, char **argv) {
    pthread_t threads[2];
    // code snipped
    int ret = ptread_create(&threads[0], NULL, threadOne(), NULL);
    printf("ret: %d\n", ret);
    // code snipped
}

制作文件:

sortieren : sortieren.o
    gcc sortieren.o

sortieren.o : sortieren.c 
    gcc -pthread -c sortieren.c

使用make sortieren会得到此输出

gcc -pthread -c sortieren.c
gcc sortieren.o
sortieren.o: In function `main':
sortieren.c:(.text+0xd7): undefined reference to `ptread_create'
collect2: ld returned 1 exit status
make: *** [sortieren] Fehler 1

我当然尝试过使用google,但是我发现的每个解决方案"都不适用于我.我在make文件的任何地方都尝试了-pthread-lpthread.为了确保我的代码没有做错什么,我还尝试了 a公开样本:

Of course I tried to google but every "solution" I found didn't worked for me. I tried -pthread or -lpthread everywhere in my make file. To be sure that I didn't do anything wrong in my code, I also tried a public sample:

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#define NUM_THREADS 5

void *PrintHello(void *threadid)
{
   long tid;
   tid = (long)threadid;
   printf("Hello World! It's me, thread #%ld!\n", tid);
   pthread_exit(NULL);
}

int main(int argc, char *argv[])
{
  pthread_t threads[NUM_THREADS];
  int rc;
  long t;
  for(t=0;t<NUM_THREADS;t++){
    printf("In main: creating thread %ld\n", t);
    rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
    if (rc){
      printf("ERROR; return code from pthread_create() is %d\n", rc);
      exit(-1);
    }
  }
  pthread_exit(NULL);
}

那里的错误是一样的.

系统:Ubuntu 11.04 64位,GCC版本4.5.2

System: Ubuntu 11.04 64bit, GCC-Version 4.5.2

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.5.2-8ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-4.5/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.5 --enable-shared --enable-multiarch --with-multiarch-defaults=x86_64-linux-gnu --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib/x86_64-linux-gnu --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.5 --libdir=/usr/lib/x86_64-linux-gnu --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin --enable-gold --enable-ld=default --with-plugin-ld=ld.gold --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)

更新

使用@Banthar提到的内容也不起作用.

Using what @Banthar mentioned doesn't work, too.

$ make sortieren
gcc -c sortieren.c
gcc -lpthread sortieren.o
sortieren.o: In function `main':
sortieren.c:(.text+0xd7): undefined reference to `ptread_create'
collect2: ld returned 1 exit status
make: *** [sortieren] Fehler 1

推荐答案

sortieren : sortieren.o
    gcc sortieren.o

sortieren.o : sortieren.c 
    gcc -pthread -c sortieren.c

应该是:

sortieren : sortieren.o
    gcc -lpthread sortieren.o

sortieren.o : sortieren.c 
    gcc -c sortieren.c

这篇关于使用pthread编译/链接错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆