ld returned 1 exit status"的解决办法

在Linux下创建线程时,编译时会出现下面的错误,
[[email protected] 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.\n");
        printf("I am stopping.\n");
        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\n",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模块

ld returned 1 exit status"的解决办法,布布扣,bubuko.com

时间: 2024-10-10 15:07:20

ld returned 1 exit status"的解决办法的相关文章

C_BigDecimal_Permission denied ld returned 1 exit status

最近在做大数运算这个课题.由于浮点数的表示范围有限,float型浮点数最多有7位十进制有效数字,如果定义为float,而输入的数字超过7位,计算机将会自动将超出的部分四舍五入,计算误差将会很大,所以就有了大数运算.输入的是字符串,可以定义到很大,将每个字符存储到数组中(C语言中没有string型,直接定义数组char str[]),然后通过把字符转化成数字进行相应计算,后面会记录我的课题收获的. 今天想记录一下Permission denied   ld returned 1 exit stat

编译ipvsadm-1.26 错误:collect2: ld returned 1 exit status

编译: ipvsadm-1.26 编译错误问题 [[email protected] ipvsadm-1.26]# make make -C libipvs make[1]: Entering directory `/root/ipvsadm-1.26/libipvs' gcc -Wall -Wunused -Wstrict-prototypes -g -fPIC -DLIBIPVS_USE_NL  -DHAVE_NET_IP_VS_H -c -o libipvs.o libipvs.c gcc

undefined reference to `pthread_create&#39; collect2: ld returned 1 exit status

Linux下编译多线程程序遇到错误: undefined reference to `pthread_create' collect2: ld returned 1 exit status 原因是系统无法找到pthread_create函数.也就是说编译器在link得时候找不到其中的一个使用库的函数. 解决办法如下: For Linux the correct command is: gcc -pthread xxx.c In general, libraries should follow s

binutils使用错误:this linker was not configured to use sysrootscollect2:ld returned 1 exit status

binutils错误,使用gcc -o 连接目标文件时,报错: /usr/local/bin/ld  :this  linker was not configured to use sysrootscollect2:ld returned 1 exit status 也有报错为:  C compiler cannot create executables 这个可能是你/usr/local/bin 目录下的有另一个版本不对应的GNU Linker ld , 同时你的环境变量把/usr/local/

gcc/g++ 编译时出现:“对’xxxx’未定义的引用,collect2: error: ld returned 1 exit status” 的错误

出现的问题: 在使用 make 编译实现一个程序时,出现了下面的错误.查看程序源文件所在的目录时发现程序已经完成了编译,并生成了 list_repo.o 的文件,说明是在程序链接生成可执行文件时发生了问题. storages/local.o:在函数‘LocalStorage::init(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >,

error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status

Windows服务器Azure云编译安装MariaDB教程 www.111cn.net 编辑:future 来源:转载 安装MariaDB数据库最多用于linux系统中了,下文给各位介绍在Windows服务器Azure云编译安装MariaDB教程,希望本文能帮助到各位. 试用1元Windows Azure,带宽都是杠杠的.下面演示下Windows Azure下编译安装LNMP环境,系统环境是Ubuntu 14.04 TLS版 软件版本: 数据库:mariadb-10.0.13 Stable PH

error: ld returned 1 exit status

[email protected]5437:~/Downloads/LBD_Descriptor/build$ cmake .. -- Configuring done -- Generating done -- Build files have been written to: /home/wj/Downloads/LBD_Descriptor/build [email protected]-Inspiron-5437:~/Downloads/LBD_Descriptor/build$ mak

/usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status make: *** [sapi/cgi/php-cgi] Err

/usr/bin/ld: cannot find -lltdl collect2: ld returned 1 exit status make: *** [sapi/cgi/php-cgi] Error 1 解决的方法: yum install *ltdl*

linux下运行strlwr函数出错:ld returned 1 exit status

运行strlwr函数时报错,源程序如下: #include<stdio.h> #include<string.h> void main() { char s[10]={"CHINA"}; printf("%s\n",strlwr(s)); return 0; } 报错内容如下: eg6527a.c: In function 'main': eg6527a.c:8:2: warning: 'return' with a value, in fu