摘要:由于信赖glib库的高质量,所以在项目中大量的使用了glib中的glist,随着项目中内容的增加,发现会在glist的g_slice_alloc等函数中莫名其妙的随机出现invalid read等操作,造成程序coredump。索性写了一个程序,专门测试glist在多线程情况下面的特性,发现在单线程情况下可以正常运行的glist操作代码在多线程下面会出现随机coredump的情况。而这些代码在逻辑上已经是保证了线程安全。故此,得出glib的非线程安全,即使在应用层保证了线程安全,在glib的底层还是非线程安全的。这点在使用时需要注意。update:在使用glib之前,调用g_thread_in
阅读全文
摘要:一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如:tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory原因一般有两个, 一个是操作系统里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对, 遇到这种情况那就去网上下载并安装上即可.另外一个原因就是已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件.所以安装共享库后要
阅读全文
摘要:这个Makefile是生成二进制程序的。参考前一篇文章PREFIX=/usr/localBIN=myLIBPATH=-L$(PREFIX)/libMY_LIBS=-L../lib -lspiderMY_CFLAGS=-I../includeLIBS:=$(MY_LIBS)INCLUDE=$(MY_CFLAGS)CFLAGS=-g -Wall -O3 $(INCLUDE)INSTALL=/usr/bin/install -cLDFLAGS= -Wl,-R$(PREFIX)/lib CC=gccSOURCE=main.cOBJS:=$(patsubst %.c, %.o, $(SOURCE))DE
阅读全文
摘要:此Makefile用来生成共享库,一个前辈写的,像他本人表示感谢。PREFIX=/usr/local #指定生成库的安装位置,当然只是程序员开发机上的位置。指定后 make install可以将库安装,app使用的时候可以指定该路径下的库文件,就能使用该库BIN=libmy.so #生成的库文件名LIBPATH=$(PREFIX)/lib #指定共享库的路径MY_CFLAGS=-I../include #头文件路径LIBS:= #可扩展lib,比如要添加glib,可以把glib路径加到这里,例如:-L../glibpath/lib -lglibINCLUDE=$(MY_CFLAGS) #可扩.
阅读全文
摘要:万能Makefile下载地址:http://ldc.usb.ve/~vtheok/cursos/ci2126/sd10/practicas/code7/Makefile测试:新建main.c写一个helloworld程序,拷贝Makefile到同级目录。直接make,通过。测试:main.c plus.c plus.h,Makefile依然可以正常工作。缺陷:没有生成共享库的功能。但该文件依然很强大,做一些简单的测试工程,使用这个足够了。
阅读全文