AIX6.1用g++安裝Poco-1.6.1-all

項目終於到了把程序往小型機上部署的階段了。不得不說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

相關文章
相關標籤/搜索