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
- cgo: C compiler "gcc" not found 報錯安裝gccGoCompileGC
- GCC開發指南GC
- Linux升級GCCLinuxGC
- GCC命令詳解GC
- Ubantu安裝gccGC
- gcc版本升級GC
- gcc庫連結GC
- GCC 內聯彙編GC
- mingw-gcc安裝GC
- GCC 多版本切換GC
- CentOS GCC 升級 6.0CentOSGC
- windows下的gcc使用WindowsGC
- GUN、GCC、LLVM和ClangGCLVM
- 論文解讀(GCC)《GCC: Graph Contrastive Coding for Graph Neural Network Pre-Training》GCASTAI
- gcc 和 g++ 的聯絡和區別,使用 gcc 編譯 c++GC編譯C++
- 多版本gcc/g 共存方案GC
- Linux中gcc編譯工具LinuxGC編譯
- Ubuntu安裝Vim與GccUbuntuGC
- gcc和gdb的基本操作GC
- Ubuntu安裝GCC10教程UbuntuGC
- gcc 和 g++ 的區別GC
- brew install gcc 卡住解決方法GC
- win10 VScode配置GCC(MinGW)Win10VSCodeGC
- gcc簡介(學習筆記)GC筆記
- 安裝升級Linux GCC版本LinuxGC
- 探索gcc編譯最佳化細節 編譯器最佳化gcc -o3GC編譯
- win10怎麼看gcc安裝成功_win10安裝和配置GCC的方法Win10GC
- 很有用的 GCC 命令列選項GC命令列
- 論文解讀(GCC)《Graph Contrastive Clustering》GCAST
- GCC編譯和連結過程GC編譯
- GCC編譯器背後的故事GC編譯
- 阿里雲伺服器升級gcc阿里伺服器GC
- linux-gcc簡要知識點 **LinuxGC
- python安裝 fbprophet 提示gcc失敗PythonGC
- linux安裝thefuck報gcc錯誤LinuxGC
- 最佳實踐 | 原始碼升級gcc原始碼GC