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

本文介绍了ACL开源库(支持多种平台如LINUX、WIN32等)的编译及使用注意事项,包括如何正确处理库之间的依赖关系,解决链接错误的方法,以及在特定环境下编译的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

py_free-物联智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值