zoukankan      html  css  js  c++  java
  • ld returned 1 exit status"的解决办法

    Linux下创建线程时,编译时会出现下面的错误,
    [root@linuxserver 807]# gcc -o 22 22.c
    /tmp/cc21HcoW.o(.text+0x4c): In function `main':
    : undefined reference to `pthread_create'
    collect2: ld returned 1 exit status
    程序为:

    #include <unistd.h>
    #include <pthread.h>
    #include <stdio.h>
    #include <stdlib.h>
    void testthread(void)
    {
            printf("I am working. ");
            printf("I am stopping. ");
            pthread_exit(0);
    }

    int main(int argc,char *argv[])
    {
            int i=0;
            pthread_t pid;
            char *szP=NULL;
            while(1)
            {
                    i++;
                    pthread_create(&pid,NULL,(void *)testthread,(void *)&i);
                    printf("ok%d,pid=%d ",i,pid);
                    sleep(5);
            }
    }
    此时,只需改变编译方式
    将gcc -o 22 22.c 改变为 gcc -O2 -Wall -o 22 22.c -lpthread

    最关键的是-lpthread

    根据错误
    /tmp/cc21HcoW.o(.text+0x4c): In function `main':
    : undefined reference to `pthread_create'
    collect2: ld returned 1 exit status
    可以看出是在ld的时候系统无法找到pthread_create函数。也就是说编译器在link得时候找不到其中的一个使用库的函数。
    如果差pthread_create的话可以发现其在pthread.so中,所以需要增加 -lpthread编译参数,告诉linker在link的时候使用pthread模块

  • 相关阅读:
    五步搞定Android开发环境部署
    centos7安装MongoDB3.4
    java数据结构之三叉链表示的二叉树
    java数据结构之二叉树遍历的非递归实现
    java数据结构之二叉树的定义和递归实现
    java数据结构之树
    java数据结构之递归算法
    java数据结构之(堆)栈
    redis主从复制配置
    Redis 发布订阅
  • 原文地址:https://www.cnblogs.com/aspirant/p/3840101.html
Copyright © 2011-2022 走看看