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!

转载请注明出处。。。。。。。。。。。。。。。

原文地址:https://www.cnblogs.com/xi52qian/p/4902400.html