acl-masterforlinux(gcc/g++-c)
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)
相關文章
- gccGC
- [c++/gcc] Centos 7.9升級 gcc 4.8.5 到 gcc11 [轉]C++GCCentOS
- Linux下GCC降低版本 gcc 4.4.6LinuxGC
- gcc編譯GC編譯
- cgo: C compiler "gcc" not found 報錯安裝gccGoCompileGC
- 開源編譯器 GCC 跨越 5.0,釋出 GCC 5.1編譯GC
- GCC 使用指南及gcc最佳編譯引數(轉)GC編譯
- gcc版本升級GC
- GCC命令詳解GC
- Ubantu安裝gccGC
- gcc庫連結GC
- gcc初步窺探GC
- Gcc HowTo(轉)GC
- gcc 簡介(轉)GC
- GCC 安裝(轉)GC
- CentOS GCC 升級 6.0CentOSGC
- GCC 多版本切換GC
- Linux升級GCCLinuxGC
- windows下的gcc使用WindowsGC
- GCC 內聯彙編GC
- <摘錄>GCC 中文手GC
- GCC編譯選項GC編譯
- gcc命令列詳解GC命令列
- 轉gcc cflags介紹GC
- GCC 編譯選項GC編譯
- cygwin/gcc與MinGWGC
- gcc 和 g++ 的聯絡和區別,使用 gcc 編譯 c++GC編譯C++
- GCC內聯彙編(2)GCC生成彙編程式碼簡單例項GC單例
- Ubuntu安裝Vim與GccUbuntuGC
- gcc和gdb的基本操作GC
- 多版本gcc/g 共存方案GC
- GUN、GCC、LLVM和ClangGCLVM
- msvc很多地方比gcc弱GC
- Makefile和GCC日常用法GC
- gcc 常用引數介紹GC
- GCC 5 即將釋出GC
- 在AIX上安裝GCCAIGC
- gcc編譯cpp檔案GC編譯