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

简介: acl开源库(acl-master,download: https://github.com/acl-dev/acl/) 是一个跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD)的网络通信库及服务器编程框架,同时提供更多的实用功能库。

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)


目录
相关文章
|
1月前
|
Linux 编译器 C语言
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
|
6月前
|
小程序 Linux 开发工具
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
|
3月前
|
Linux C语言
成功解决 在Linux CentOS 7 中安装gcc
这篇文章介绍了如何在Linux CentOS 7系统中安装gcc (g++) 8工具集。由于CentOS 7默认的gcc版本是4.8,而这个版本与Qt 5.14、Qt 5.15或更高版本不兼容,可能会导致编译时出现系统头文件错误。文章中提到,即使在项目配置中添加了`CONFIG+=c++11`,如果仍然报错,那么很可能是gcc版本的问题。为了解决这个问题,文章提供了使用CentOS的Software Collections (scl)来安装更新版本的gcc的步骤。
成功解决 在Linux CentOS 7 中安装gcc
|
2月前
|
Linux 编译器 C语言
Linux内核对GCC版本的检测
Linux内核对GCC版本的检测
|
3月前
|
Java Linux 编译器
【Linux】gcc简介+编译过程
【Linux】gcc简介+编译过程
|
5月前
|
Shell Linux 网络安全
Linux怎样在使用ssh 链接时就指定gcc 的版本
Linux怎样在使用ssh 链接时就指定gcc 的版本
57 7
|
5月前
|
Linux vr&ar C语言
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
302 2
|
5月前
|
Ubuntu Linux 编译器
当自身需要使用的 gcc版本 和Linux 默认版本 存在大版本差异时怎样处理
当自身需要使用的 gcc版本 和Linux 默认版本 存在大版本差异时怎样处理
128 2
|
5月前
|
Java 编译器 Linux
程序技术好文:详解Linux安装GCC方法
程序技术好文:详解Linux安装GCC方法
166 0
|
5月前
|
NoSQL 编译器 Linux
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用
86 0