項目終於到了把程序往小型機上部署的階段了。不得不說AIX真是讓人噁心,一個Poco編譯弄了我1周時間。網上根本沒有相關的資料。編輯器
1. AIX下安裝gcc/g++:
在ftp://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/gcc/下載:
gcc-4.2.0-3.aix6.1.ppc.rpm
libgcc-4.2.0-3.aix6.1.ppc.rpm
libstdcplusplus-4.2.0-3.aix6.1.ppc.rpm
libstdcplusplus-devel-4.2.0-3.aix6.1.ppc.rpm
gcc-cplusplus-4.2.0-3.aix6.1.ppc.rpm
並經過rpm –ivh 依次安裝.
2. Poco進行configure時,會報錯,提示在AIX下要安裝補丁,補丁在Poco根目錄下的patches/AIX/xlC8.diff。
> cp patches/AIX/xlC8.diff ./
> patch -p0 < xlC8.diff
運行失敗,檢查vi xlC8.diff發現這個補丁文件是Poco1.3版本時候的了,行號根本匹配不上,因而本身按照xlC8.diff
文件內容一個個文件修改了一下,還好升級的文件不是不少,以後用diff -ur自動生成了xlC8.diff文件,有些地方還需
要修改,項目工期緊張,沒時間修改了,以後會把修改後的xlC8.diff文件傳上來。
最後一步將patches/AIX目錄刪除。
3. 修改配置選項
> ./configure --omit=NetSSL_OpenSSL,Crypto,Data/ODBC,Data/MySQL --prefix=/opt/poco --no-tests --no-samples
> gmake -s
報錯,找不到xlc_r,查看AIX上根本沒有安裝xlc IBM的編輯器。因爲收費軟件因此放棄,改用gcc/g++編譯。
若是AIX安裝了xlc的小夥伴們能夠試試直接安裝是否有什麼問題。
因爲用gcc/g++編譯,第2步的diff升級可能不須要了,這裏我沒有測試。我依然用的修改後的文件編譯。
由於Poco給出的AIX配置編譯選項是放在根目錄下的build/config/AIX文件,查看裏面都是xlc的編譯選項。因而本身參照Linux作了一個配
置文件AIX_GCC,放到build/config目錄下,內容爲:(失敗過不少次修改的結果,花費時間1周!)
測試
1 # 2 # $Id: //poco/1.6/build/config/AIX_GCC#2 $ 3 # 4 # AIX 5 # 6 # Make settings for Linux 2.6/gcc 4.2 7 # 8 # 9 10 # 11 # General Settings 12 # 13 LINKMODE ?= SHARED 14 15 # 16 # Define Tools 17 # 18 CC = ${CROSS_COMPILE}gcc 19 CXX = ${CROSS_COMPILE}g++ 20 LINK = $(CXX) 21 LIB = ${CROSS_COMPILE}ar -cr 22 RANLIB = ${CROSS_COMPILE}ranlib 23 #SHLIB = $(CXX) -shared -Wl,-soname,$(notdir $@) -o $@ 24 SHLIB = $(CXX) -shared -Wl,-brtl -maix64 -fconserve-space -o $@ 25 SHLIBLN = $(POCO_BASE)/build/script/shlibln 26 STRIP = ${CROSS_COMPILE}strip 27 DEP = $(POCO_BASE)/build/script/makedepend.gcc 28 SHELL = sh 29 RM = rm -rf 30 CP = cp 31 MKDIR = mkdir -p 32 33 # 34 # Extension for Shared Libraries 35 # 36 SHAREDLIBEXT = .so.$(target_version) 37 SHAREDLIBLINKEXT = .so 38 39 # 40 # Compiler and Linker Flags 41 # 42 CFLAGS = -maix64 -fconserve-space 43 CFLAGS32 = 44 CFLAGS64 = 45 #CXXFLAGS = -Wall -Wno-sign-compare 46 CXXFLAGS = -maix64 -fconserve-space -Wno-sign-compare 47 CXXFLAGS32 = 48 CXXFLAGS64 = 49 LINKFLAGS = 50 LINKFLAGS32 = 51 LINKFLAGS64 = 52 STATICOPT_CC = 53 STATICOPT_CXX = 54 STATICOPT_LINK = -static 55 SHAREDOPT_CC = -fPIC 56 SHAREDOPT_CXX = -fPIC 57 #SHAREDOPT_LINK = -Wl,-rpath,$(LIBPATH) 58 SHAREDOPT_LINK = -Wl,-brtl -maix64 -fconserve-space 59 DEBUGOPT_CC = -g -D_DEBUG 60 DEBUGOPT_CXX = -g -D_DEBUG 61 DEBUGOPT_LINK = -g 62 RELEASEOPT_CC = -O2 -DNDEBUG 63 RELEASEOPT_CXX = -O2 -DNDEBUG 64 RELEASEOPT_LINK = -O2 65 66 # 67 # System Specific Flags 68 # 69 #SYSFLAGS = -D_XOPEN_SOURCE=500 -D_REENTRANT -D_THREAD_SAFE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -DPOCO_HAVE_FD_EPOLL 70 SYSFLAGS = -D_REENTRANT -D_THREAD_SAFE -D__powerpc__ 71 72 # 73 # System Specific Libraries 74 # 75 SYSLIBS = -lpthread -ldl -lrt
PS:於2015-11-09修改,以前的版本依然有BUG,編譯後的POCO執行string賦值時會出現段錯誤。
4. 執行
> ./configure --omit=NetSSL_OpenSSL,Crypto,Data/ODBC,Data/MySQL --prefix=/opt/poco --no-tests --no-samples --config=AIX_GCC
成功後。
> gmake -s
編譯到Data的時候,文件RecordSet.cpp的時候,382行結尾出問題,g++報錯,段錯誤,而後崩了!這個問題沒找到解決辦法,由於我沒有用到
這個文件,因此我將關聯的三個文件從Poco中Makefile中刪除,Data/Makefile修改後部分:
objects = AbstractBinder AbstractBinding AbstractExtraction AbstractExtractor \
AbstractPreparation AbstractPreparator ArchiveStrategy Transaction \
Bulk Connector DataException Date DynamicLOB Limit MetaColumn \
PooledSessionHolder PooledSessionImpl Position \
Range Row RowFormatter \
SimpleRowFormatter Session SessionFactory SessionImpl \
SessionPool SessionPoolContainer SQLChannel \
Statement StatementCreator StatementImpl Time
> gmake -s
成功。
su - root
密碼。
cd Poco目錄
> gmake install
修改install目錄的權限。OK!
ui
轉載請註明出處。。。。。。。。。。。。。。。spa