当前位置: 技术问答>linux和unix
问一个编译加 -lpthread的问题
来源: 互联网 发布时间:2016-04-24
本文导语: 没加-lpthread之前的makefile all:clean desktop desktop:desktop.o desktop.h openFb.o readBmp.o LCDShow.o arm-linux-gcc -o desktop desktop.o openFb.o readBmp.o LCDShow.o desktop.o:desktop.c arm-linux-gcc -c desktop.c -I /usr/hLib openFb.o:openFb.c ...
没加-lpthread之前的makefile
all:clean desktop
desktop:desktop.o desktop.h openFb.o readBmp.o LCDShow.o
arm-linux-gcc -o desktop desktop.o openFb.o readBmp.o LCDShow.o
desktop.o:desktop.c
arm-linux-gcc -c desktop.c -I /usr/hLib
openFb.o:openFb.c
arm-linux-gcc -c openFb.c
readBmp.o:readBmp.c
arm-linux-gcc -c readBmp.c
LCDShow.o:LCDShow.c
arm-linux-gcc -c LCDShow.c
clean:
rm -rf desktop
rm -rf desktop.o
rm -rf openFb.o
rm -rf readBmp.o
rm -rf LCDShow.o
加了-lpthread之后
all:clean desktop
desktop:desktop.o desktop.h openFb.o readBmp.o LCDShow.o
arm-linux-gcc -o desktop desktop.o openFb.o readBmp.o LCDShow.o -lpthread
desktop.o:desktop.c
arm-linux-gcc -c desktop.c -I /usr/hLib
openFb.o:openFb.c
arm-linux-gcc -c openFb.c
readBmp.o:readBmp.c
arm-linux-gcc -c readBmp.c
LCDShow.o:LCDShow.c
arm-linux-gcc -c LCDShow.c
clean:
rm -rf desktop
rm -rf desktop.o
rm -rf openFb.o
rm -rf readBmp.o
rm -rf LCDShow.o
我的程序与多线程无关,只不过现在想加多线程的东西,所以想先加上-lpthread试试看编译,但是奇怪的是我本来makefile没加-lpthread的时候可以运行,但是加了上面那句-lpthread之后,编译通过,但是运行是产生段错误,我的代码根本没用到-lpthread的东西,一点都没改过,这是为什么?
all:clean desktop
desktop:desktop.o desktop.h openFb.o readBmp.o LCDShow.o
arm-linux-gcc -o desktop desktop.o openFb.o readBmp.o LCDShow.o
desktop.o:desktop.c
arm-linux-gcc -c desktop.c -I /usr/hLib
openFb.o:openFb.c
arm-linux-gcc -c openFb.c
readBmp.o:readBmp.c
arm-linux-gcc -c readBmp.c
LCDShow.o:LCDShow.c
arm-linux-gcc -c LCDShow.c
clean:
rm -rf desktop
rm -rf desktop.o
rm -rf openFb.o
rm -rf readBmp.o
rm -rf LCDShow.o
加了-lpthread之后
all:clean desktop
desktop:desktop.o desktop.h openFb.o readBmp.o LCDShow.o
arm-linux-gcc -o desktop desktop.o openFb.o readBmp.o LCDShow.o -lpthread
desktop.o:desktop.c
arm-linux-gcc -c desktop.c -I /usr/hLib
openFb.o:openFb.c
arm-linux-gcc -c openFb.c
readBmp.o:readBmp.c
arm-linux-gcc -c readBmp.c
LCDShow.o:LCDShow.c
arm-linux-gcc -c LCDShow.c
clean:
rm -rf desktop
rm -rf desktop.o
rm -rf openFb.o
rm -rf readBmp.o
rm -rf LCDShow.o
我的程序与多线程无关,只不过现在想加多线程的东西,所以想先加上-lpthread试试看编译,但是奇怪的是我本来makefile没加-lpthread的时候可以运行,但是加了上面那句-lpthread之后,编译通过,但是运行是产生段错误,我的代码根本没用到-lpthread的东西,一点都没改过,这是为什么?
|
应该是编译器自动为你加入了 处理线程 的代码,虽然你没有使用线程的调用,但是你加上了-lpthread就是你要使用线程的一种暗示。。
段错误有可能是你原来程序内就隐藏了一个错误的内存使用,只是没有暴露而已
如果是多进程,你还可以检查一下多个进程对共享全局变量的使用,如果没有加以保护,也可能会造成内存的不当
段错误有可能是你原来程序内就隐藏了一个错误的内存使用,只是没有暴露而已
如果是多进程,你还可以检查一下多个进程对共享全局变量的使用,如果没有加以保护,也可能会造成内存的不当