pthread_create中的分段错误

时间:2014-10-10 21:09:16

标签: linux pthreads shared-libraries

我正在使用pthread_create来使用共享库中的函数。执行以下代码后,我收到Segmenation错误:

#include <stdlib.h>
#include <stdio.h>
#include <dlfcn.h>
#include<string.h>
#include<pthread.h>
#include<unistd.h>

void (*GetVersion)(char *version);

void* draw(void *arg)
{
    void *handle;
    char *error;    

    handle = dlopen ("libOpenKaillera.so", RTLD_LAZY);
    if (!handle) {
        fputs (dlerror(), stderr);
        exit(1);
    }

    GetVersion = dlsym(handle, "GetVersion");
    if ((error = dlerror()) != NULL)  {
        fputs(error, stderr);
        exit(1);
    }

    char version[4];
    kailleraGetVersion(version);
    puts(version);
    dlclose(handle);
    return NULL;
}

int main(void)
{
    pthread_t tid;

    pthread_create(&tid, NULL, &draw, NULL);        
    sleep(5000);
    return 0;
}

backtrace命令说明如下:

#0  0xb68e7be0 in ?? ()
#1  0xb7fa9d56 in __nptl_deallocate_tsd () at pthread_create.c:158
#2  0xb7fa9f83 in start_thread (arg=0xb7df0b40) at pthread_create.c:325
#3  0xb7ede4ce in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:129

我不明白是什么原因造成的。你能帮帮我吗?

1 个答案:

答案 0 :(得分:2)

每次调用pthread_create后,请记得致电pthread_joinpthread_detach告诉线程如何执行终止。通常,请在退出创建线程之前调用pthread_join(在这种情况下,它是函数main)。