使用 GCC 在 IBM AIX 上编译程序

在 IBM AIX 5.3 上使用 GCC 编译程序心得如下:

  1、编译 64 位和 32 位程序的参数分别是 -maix64 -maix32 ,默认编译 32 位程序

  2、链接时指定动态库直接给定动态库名称,例如 libfunc.so 而不是 -lfunc 的形式,否则给出 ld returned 255 错误信息

  3、搜索动态库的路径 -L 指定的目录将被编译到目标程序中,例如使用 -L. 编译的结果使用 ldd 查看可以看到 ./libfunc.so 如果使用 -L/app/demo 则 ldd 显示依赖与 /app/demo/libfunc.so

  如果有文件 func.cpp 和 demo.cpp 前者编译成动态库 libfunc.so ,后者是可执行程序,使用前面的动态库,命令列表如下:

g++ -fPIC -O3 -ggdb -o func.o func.cpp
g
++ -fPIC -O3 -ggdb -o main.o demo.cpp
g
++ -fPIC -shared -o libfunc.so func.o
g
++ -fPIC -o demo demo.o libfunc.so -L.

  执行 demo 程序可以看到已经调用动态库中的函数输出信息,使用 ldd 可以看到 demo 依赖动态库 ./libfunc.so

  这与在 linux 下编译的参数有差异,在 linux 下编译的命令行应该是:

g++ -fPIC -c -o func.o func.cpp
g
++ -fPIC -shared -o libfunc.so func.o
g
++ -fPIC -c -o demo.o demo.cpp
g
++ -fPIC -o demo demo.o -lfunc -L/app/demo

  linux 的动态库加载器严格按照 LD_LIBRARY_PATH 的顺序搜索,不像 Windows 会首先在可执行程序所在的目录搜索。

  如果在 LD_LIBRARY_PATH 中配置了当前目录 . 则在 /app/demo 下执行 demo 可以成功执行,但是在 /app 下执行 demo/demo 则提示找不到动态库。

  

转载于:https://www.cnblogs.com/WonKerr/archive/2011/08/14/GCC_IBM_AIX.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值