昨天在linux下运行一个C程序,是处理一段视频中的每一帧的,本来在程序中是要每处理完一帧就要输出一条信息的,但是在运行是却不显示,而是在程序运行完成之后一块输出的,但是在windows中运行程序就没有这个问题。如果是这样的话,就非常不爽了,因为本来是想通过程序的输出来得到程序当前的运行状况,现在却达不到这种效果。然后上网上搜索了一下,看来果然有解决方案。存在这个问题的主要原因就是在调用printf输出信息后,程序并不是立即输出,而是将其输出到了缓存中,所以,我们要做的就是在printf之后立即将缓存中的信息输出到终端。所以可以在printf之后添加fflush(stdout),这样就能立即将缓存中的数据输出了。
另外,附上Makefile文件,这是我以后在linux下写程序的时候的一个模板。
TARGET:=attention INCDIR:=inc SRCDIR:=src OBJDIR:=obj $(shell if !([ -d $(OBJDIR) ]);then mkdir $(OBJDIR);fi) LIBDIR:=lib $(shell if !([ -d $(LIBDIR) ]);then mkdir $(LIBDIR);fi) CC :=g++ FLAGS:=-Wall -W -I$(INCDIR) -D_DEBUG LIBS :=-lm OPENCV=1 #switch of opencv ifdef OPENCV FLAGS+=`pkg-config --cflags opencv` LIBS +=`pkg-config --libs opencv` endif #DBG=0 ifdef DBG FLAGS+=-g else FLAGS+=-O2 endif SRC:=$(wildcard $(SRCDIR)/*.cpp) OBJ:=$(patsubst %.cpp,$(OBJDIR)/%.o,$(notdir $(SRC))) #all: # @echo $(OBJ) # $(TARGET):$(OBJ) $(CC) -o $@ $^ $(FLAGS) $(LIBS) $(OBJDIR)/%.o:$(SRCDIR)/%.cpp $(CC) -c $< -o $@ $(FLAGS) .PHONY: clean clean: rm -f $(OBJDIR)/*.o *~ core
Makefile其实还是很强大的,现在初学阶段只是简单的使用。
这儿有几个比较好的makefile模板
在Linux环境下,一个处理视频帧的C程序中,printf并未实时输出信息,而是在程序结束时一次性显示。问题源于printf将输出放入缓冲区,通过在printf后添加fflush(stdout)可解决此问题,确保立即输出。此外,分享了一个简单的Makefile模板,作为在Linux下编写程序的参考。

9606

被折叠的 条评论
为什么被折叠?



