本人最近在写多线程相关的程序,用到了boost多线程,其中boost库用的是1.68,操作系统是Ubuntu16 boost库已经完全编译安装。但是在用make编译的时候还是出错了,这里说明一下就是,已经包含头文件了。只有编译多线程会出错。编译原子操作不会。
可能会遇到这样的错误。遇到这种错误主要是因为没有链接多线程的库。
-lboost_system -lboost_thread
你需要在你的makefile的链接库中添加库。就可以编译通过了。
我自己写的通用makefile
.PYONY:clean
cc = g++
CFLAGS = -Wall -g -I ./inc -I. -std=c++11 #头文件
LIBO = -lpthread -lm -lboost_system -lboost_thread #链接
BIN = main
SUBDIR = $(shell ls -d */)
ROOTSRC = $(wildcard *.cpp)
ROOTOBJ = $(ROOTSRC:%.c=%.o)
SUBSRC = $(shell find $(SUBDIR) -name '*.cpp')
SUBOBJ = $(SUBSRC:%.c=%.o)
$(BIN):$(ROOTOBJ) $(SUBOBJ)
$(cc) $(CFLAGS) -o $(BIN) $(ROOTOBJ) $(SUBOBJ) $(LIBO)
$(SUBOBJ).c.o:
$(cc) $(CFLAGS) -c $< -o $@
clean:
rm -f $(BIN) $(ROOTOBJ) $(SUBOBJ)
cc 是变量名,用g++ 作为编译器。
CFLAGS是需要链接的头文件, -Wall是检测是否有警告,-g是为gdb调试用的,-I ./inc 是链接./inc的头文件 -I. 是链接boost库中的文件 -std=c++11 是使用c++11标准编译。
LIBO是链接库,-lpthread是链接pthread多线程的库,C++11标准也用到了,-lm是链接数学库,-lboost_system -lboost_thread这两个是链接boost多线程库。
BIN是生成的可执行文件
SUBDIR 是执行的shell命令。
下面就是编译的具体步骤。
这个文件放到项目根目录下就可以编译src中的源文件和inc中头文件了。