acl-master for linux (gcc/g++ -c)

  1. 云栖社区>
  2. 博客>
  3. 正文

acl-master for linux (gcc/g++ -c)

py_tty_0529 2018-02-08 13:53:44 浏览582
展开阅读全文

acl开源库(acl-master,download: https://github.com/acl-dev/acl/)

是一个跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD)的网络通信库及服务器编程框架,同时提供更多的实用功能库。

其源码工程Linux编译及使用需要有几点需要注意:

1)acl的 Makefile文件一般使用gcc -c选项编译的,其实例也是采用该选项,实际使用中,一般是分别编译lib_acl、lib_acl_protocol、lib_acl_cpp,然后在工程中引用相应的头文件及输出库,注意这三个库的依赖关系:libprotocol.a 依赖于 libacl.a,libacl_cpp.a 依赖于 libprotocol.a 及 lib_acl.a,在使用 g++ 进行编译时必须保证库的依赖顺序,被依赖的库总是应放在后面,否则在链接程序时会报函数不存在。但是工程项目最好支持-c选项,否则会在工程链接时报一堆链接错误。

2)如果需要实际工程还包含其他库的静态/动态的链接,不能使用-c选项时,最好直接在acl-master下用命令make build_one编译出libacl_all.a和libacl_all.so,直接使用该库和其三个头文件目录即可,这样可以不采用-c选项编译也可以。

ACLDIR		:= $(TOPDIR)/../acl-master
INCLUDEDIR 	+= -I"$(ACLDIR)/lib_acl/include" -I"$(ACLDIR)/lib_protocol/include" -I"$(ACLDIR)/lib_acl_cpp/include"
APPENDLIB += -L"$(ACLDIR)" -lacl_all


2)如果acl-master源码采用外挂接到虚拟系统进行编译,由于ln命令不支持,是不能make build_one完成编译的,会在进行ln时被打断,需要我们分别去acl-master/lib_acl,acl-master/lib_protocol,acl-master/lib_acl_cpp,acl-master/lib_fiber/c,acl-master/lib_fiber/cpp,和acl-master目录下去编辑其Makefile文件,将链接指向本地磁盘存储,才能完成make build_one编译。

修改示例:

static: $(OBJS_DST)
	@echo 'creating $(LIB_PATH_DST)/$(STATIC_LIBNAME)'
	@$(AR) $(ARFL) $(LIB_PATH_DST)/$(STATIC_LIBNAME) $(OBJS_DST)
	@$(RANLIB) $(LIB_PATH_DST)/$(STATIC_LIBNAME)
	@(cd $(LIB_PATH_DST); rm -f $(STATIC_OLD_LIBNAME); \
		ln -s $(STATIC_LIBNAME) $(STATIC_OLD_LIBNAME))
	@echo 'build $(LIB_PATH_DST)/$(STATIC_LIBNAME) ok!'
	
clean_lib:
	rm -f $(LIB_PATH_DST)/$(STATIC_LIBNAME)
	rm -f $(LIB_PATH_DST)/$(STATIC_OLD_LIBNAME)
	rm -f $(LIB_PATH_DST)/libacl.so
	rm -f $(OBJS_DST)
	rm -f $(OBJS_DEF)
	rm -f $(PCH)
	
	修改为:
LINKDIR := /home/***/acl

static: $(OBJS_DST)
	@echo 'creating $(LIB_PATH_DST)/$(STATIC_LIBNAME)'
	@$(AR) $(ARFL) $(LIB_PATH_DST)/$(STATIC_LIBNAME) $(OBJS_DST)
	@$(RANLIB) $(LIB_PATH_DST)/$(STATIC_LIBNAME)
	@(cd $(LIB_PATH_DST); rm -f $(LINKDIR)/$(STATIC_OLD_LIBNAME); \
		ln -s $(STATIC_LIBNAME) $(LINKDIR)/$(STATIC_OLD_LIBNAME))
	@echo 'build $(LIB_PATH_DST)/$(STATIC_LIBNAME) ok!'
	
clean_lib:
	rm -f $(LIB_PATH_DST)/$(STATIC_LIBNAME)
	rm -f $(LINKDIR)/$(STATIC_OLD_LIBNAME)
	rm -f $(LIB_PATH_DST)/libacl.so
	rm -f $(OBJS_DST)
	rm -f $(OBJS_DEF)
	rm -f $(PCH)


网友评论

登录后评论
0/500
评论
py_tty_0529
+ 关注