Aix编译64位libxml2

最近在处理Aix上面的一些问题,由于对aix系统刚刚接触,导致走了一引起弯路,现在整理出来,供大家参考。

本人使用的是aix 64位系统,编译器使用xlC。

一、链接库的问题

项目中链接了第三方的zlib、iconv、xml2库,zlib、iconv可以正常链接,xml2编译链接都没有问题,但运行时会出问题。提示运行时库未找到。尝试各种方法很久无果。

于是抱着试一试的心态将xlC的编译选项-q64去掉,编译、运行,发现竟然好了。

至此,便开始怀疑是xml位数不对的问题了。于是加上编译选项-q32,编译、运行仍然没有问题,确定是xml库的位数的问题。

经实践证明,在aix上iconv和libz貌似是不分32位和64位的,libxml2有32位和64位之分。

于是上网搜索,发现xml并没有自动适应平台,编译64位xml需要做如下配置

参考了网友的方法,自己的实践过程。

    平台:AIX5.3

    编译器:xlc 6.0.0.0

    介质:libxml2-2.7.2.tar.gz

编译步骤:

    1 ./configure --prefix=/home CC=xlc

    2 修改Makefile文件如下:

        CC = xlc -q64
        AR = ar -X64

    3 export OBJECT_MODE=64

      make

    4 make install

完了,重新将自己的编译选项改为64位,大功告成!

xlC在编译链接时竟然不报错真是一个大坑啊!

当然了也由于自己经验不足,没有及时去查看相应库的位数,导致走了弯路。

关于查看系统及库文件的位数请参看我的另一篇文章《如何判断Unix系统及库文件是32位还是64位的》。

二、动态链接和静态链接的问题

Linux和Aix下默认均为动态链接,通过添加编译选项指定其为静态链接方式。

1、Aix

Aix下使用xlC编译器,添加编译选项-bstatic或-bdynamic指定其为静态链接或动态链接。但如果指定某个库为静态链接,则需要在其前面加上-bstatic,后面加-bdynamic,否则后面所有的库均会使用静态链接。例如:
xlC_r -q64 -c  -qpic=large -g  -I.  -I/usr/local/include  main.cpp
xlC_r -q64 -g  -brtl -o test main.o  -L/usr/local/lib   -lxml2  -liconv
则生成的test程序中则会动态链接libxml2.a,libiconv.a。

xlC_r -q64 -c  -qpic=large -g  -I.  -I/usr/local/include  main.cpp
xlC_r -q64 -g  -brtl -o test main.o  -L/usr/local/lib  -bstatic  -lxml2  -liconv
则生成的test程序中则会静态链接libxml2.a,libiconv.a。

xlC_r -q64 -c  -qpic=large -g  -I.  -I/usr/local/include  main.cpp
xlC_r -q64 -g  -brtl -o test main.o  -L/usr/local/lib   -lxml2 -bstatic -liconv -bdynamic
则生成的test程序中则会动态链接libxml2.a,静态链接libiconv.a。

2、Linux

Linux下使用gcc/g++编译器,资料上看是采用-static和-dynamic编译选项,但尝试后并无效果,等以后有机会再尝试。
g++ -c -g -Wall -fPIC -D_REENTRANT -D_DEBUG -D_FILE_OFFSET_BITS=64 -I.  -I/usr/include/libxml2  main.cpp
g++ -g -o test main.o  -L/usr/local/lib -lxml2
则test动态链接libxml.so

使用下面方式可以进行静态链接,不使用-l,直接将xx.a编译进去即可。
g++ -c -g -Wall -fPIC -D_REENTRANT -D_DEBUG -D_FILE_OFFSET_BITS=64 -I.  -I/usr/include/libxml2  main.cpp
g++ -g -o test main.o  -L/usr/local/lib  /usr/local/lib/libxml2.a
则test静态链接libxml.a




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值