linux线程(pthread)编程中的segmentation fault!!
linux线程(pthread)编程中的segmentation fault!!
Posted on 星期五, 3月 27th, 2009 at 10:28 下午
源文来自http://www.isongzi.com/2009/03/27/pthread-segmentation-fault/
继socket bad addres 错误之后,在创建线程【pthread_create()】的时候又出现了 segmentation fault。
错误语句如下:
pthread_create(&dec_tid,NULL, (void *)&encode, (void *)&cmd);
encode 声明如下:
int encode(void *arg);
开始我想的是,会不会是encode前面不用加&呢?按照声明定义:
pthread_create(&tid, &attr, (void *)myfunction, myarg);
第三个参数就是函数名而已,是为了表明线程函数的入口地址。但是,看的freescale提供的参考程序中有源码是这样的:
pthread_create(&sigtid, NULL, (void *)&signal_thread, NULL);
也就是说,可以把第三个参数也即函数名前面加上&,两个效果一样。为了检验到底什么地方错误,还是改了一下:
pthread_create(&dec_tid,NULL, (void *)encode, (void *)&cmd);
把encode前面 的&去掉,但是依然segmentation fault.。
网上找了一下,原因在于调试的时候没加 -lpthread!想要编译多线程的程序,必须如下编译:
gcc -o test -lpthread test.c,
因为线程库不是内核自带的,要显式说明。问题是,为什么GCC在编译的时候不报错呢?
这个问题比较有难度。好了,原因找到了,怎么解决?Makefile 文件如下:
#This Makefile is from http://isongzi.com which is to make send.out
CC=$(CROSS_COMPILE)gcc
LINK=$(CROSS_COMPILE)gcc
CROSS_COMPILE=arm-926ejs-linux-
OBJ = main.o \
enc.o \
capture.o \
fb.o \
socket.o \
OBJDIR=./bin
LIBNAME = libvpu.a
LIBDIR = ./lib/
# list of platforms which want this test case
INCLUDE_LIST:=IMX27ADS IMX31ADS MXC30031ADS IMX27MDK27V0
TARGET = send.out
all: $(TARGET) $(TARGET1)
$(TARGET): $(LIBDIR)$(LIBNAME) $(OBJ)
$(LINK) -L . -lpthread -o $(TARGET) $(OBJ) $(LIBNAME)
mkdir -p $(OBJDIR)
mv $(TARGET) $(OBJDIR)
mv $(LIBNAME) $(OBJDIR)
%.o: %.c
$(CC) -Wall -O2 -I $(LIBDIR) -c $^ -o $@
$(LIBDIR)$(LIBNAME):
make -C $(LIBDIR)
mv $(LIBDIR)$(LIBNAME) .
.PHONY: clean
clean:
rm -f $(OBJDIR)/$(TARGET) $(OBJ) $(LIBNAME)
原来
相关文档:
例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......
中断处理依赖于中断类型,有三种主要的中断类型:
i/o中断:某些i/设备需要关注;相应的中断处理程序必须查询设备以确定适当的操作过程。
时钟中断:某种时钟(或者是一个本地apic时钟,或者是一个外部时钟)产生一个中断;这种中断告诉内核一个固定的时间间隔已经过去。这些中断大部分是作为i/o中断来处理的。
处理器间 ......
很多LINUX初学者分不清楚linux和X之间,X和Xfree86之间,X和KDE,GNOME等之间是什么关系.常常混淆概念,我想以比较易于理解的方式说明一下X,X11,XFREE,WM,KDE,GNOME等之间的关系.由于本人水平有限可能存在错误,请高手指正.
一,linux本身没有图形界面,linux现在的图形界面 ......
今天重新编译以前的一个程序,里面用到iconv库:gcc test.cc -liconv
运行时:a.out:error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
以前编译运行是可以的,可能是不久前升级了iconv库影响。在/usr/local/lib下可以找到libiconv.so.2,把/usr/local/l ......
摘要: 本文详解了内核中面向对象的list结构的原理,以及如何以list为内嵌对象来构造自己的链表结构,如何从内嵌list对象获得自定义的对象指针;探讨了各种宏或者函数的详细使用方法及怎样以通用list结构来操作自定义对象。
关键字:双向循环链表,list,list_entry,typeof,containerof,list_for_each,list_for_each ......