Ⅰ 向大虾求助:mysql编译时出现警告 gcc: -lpthread:未使用链接器输入文件,因为链接尚未完成
需要提供完整的编译错误信息。感觉像系统内衫亩没罩薯有pthread的库文件,或闷森可以看看系统是否没有安装线程包。
Ⅱ cmake编译缺失pthread_create等thread库解决方案
原文地址: https://justchen.com/2017/02/27/cmake%E7%BC%96%E8%AF%91%E7%BC%BA%E5%A4%B1pthread_create%E7%AD%89thread%E5%BA%93%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88.html
在使用cmake来编译项目时,明明在CMAKE_CXX_FLAGS项中设置了-lpthread项目,在运行生成makefile时确实也看到了有-lpthread,但还是报错:对‘pthread_create’未定义的引用,简直握搜槐是日了狗了…
后来google到了答段友案,如果是cmake项目需要修改Cmakefile.txt,增加以下内容
果然,加上后就解决漏旁问题了,makefile,只是把-lpthread移到了最后,如果只是动CMAKE_CXX_FLAGS项-lpthread是紧根着g++后,也许这样不起作用….
Ⅲ linux下线程pthread编译时为什么要加lpthread
shibixiao | 六级
lpthread是表示要连接到pthread的库是这让脊里省略的lib,你应该可以找到共享库libpthread.so的兆滑蔽
因为pthread编程用到的函数在pthread库里族州面,就像你使用pow等数学计算函数,需要用到math.h
需要 -lm
Ⅳ gcc 编译选项 -pthread -lpthread 异同
-pthread 比 -lpthread 多了一个宏定义 -D_REENTRANT
对于多线程程序来说这个宏非常重要,这个宏会让libc和一些其他库,自动选择线程安全的函数实现(很多函数有线程安全和不安全的2种实现版本)
所以建议使用-pthread 或者加上 -D_REENTRANT.
Ⅳ linux下线程pthread编译时为什么要加lpthread
lpthread是表模颤示要连接到pthread的库是这里省略信搭的lib,你应该可以找到共享旦坦败库libpthread.so的
Ⅵ gcc编译线程程序,为什么要加-lpthread,头文件已经包含了<pthread.h>了啊
-lpthread是链接库,
<pthread.h>只有申明,实现部分都在库里面。
创建线程时一般是把函数的指针做参数,所以要加一个取地址符号。
ret=pthread_create(&id,NULL,(void *)&thread,NULL);
另外,建议要检查一下创建线程的返回值ret是否成功,防止影响后面的代码。
(6)编译lpthread扩展阅读:
每个语言编译器都是独立程序,此程序可处理输入的原始码,并输出组合语言码。全部的语言编译器都拥有共通的中介架构:一个前端解析符合此语言的原始码,并产生一抽象语法树,以及一翻译此语法树成为GCC的暂存器转换语言〈RTL〉的后端。
编译器最佳化与静态程序码解析技术(例如FORTIFY_SOURCE,一个试图发现缓冲区溢位〈buffer overflow〉的编译器)在此阶段应用于程序码上。最后,适用于此硬件架构的组合语言程序码以Jack Davidson与Chris Fraser发明的算法产出。
Ⅶ 使用(LPTHREAD_START_ROUTINE)强制转换和线程函数声明问题
这样是编译通过了,但是不妥当,可能会造成程序崩溃
void ThreadFunc(int a ,int b)的函数定义了两个变量,在编译成汇编代码之后,API以为你这个函数规则是烂迅正常的ThreadProc规则进而调用函数时可能造成堆栈不平衡的错误,不建议使用。
至于为什么可以,是因为C/C++的灵活性,其实强制CreateThread函数的LPTHREAD_START_ROUTINE这个参数只是个函数指针,换句话说,只要你内存里有这个函数的地址,就能够编译通过,这些内容如果你学习了汇编语言之后就能更深刻地仔历虚理解了。
编译通过并不代表运行正常,你的做法其实是很危险的,很有可能念燃把程序弄崩溃,这就是C/C++的灵活性带来的副作用。
Ⅷ c编程中main函数中使用了库文件中定义的函数,编译时却提示该函数未定义,这是什么问题,坐等高手解答
原因:
头文件 pthread.h 没有包含态冲哗到判慧源文件中
解决方法:
1)将 pthread.h 复制到源文件相同的文件夹中
2)修改为:帆行#include "pthread.h"
Ⅸ 在Linux下编译C或C++多线程的时候,总是要用-lpthread,太麻烦。请看问题补充。
编译参数,学学makefile怎么写吧
Ⅹ linux里面线程编译运行问题
#gcc a.c -o a #此句的-o a说明输出目标文件为“a”;
#gcc -Wall-lpthread threadcreatetest.c #此句未注明输出目标文件名,系统默认输出为a.out,所以编译之后执行./a.out文件。
如果上句也没有指明“ -o a ”的话,输出也是a.out,你可以试试