• 使用 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 则提示找不到动态库。

      

  • 相关阅读:
    iOS设备后台播放音乐方法
    iOS 编译64位FFMPEG
    os8 location authorization 错误.
    IOS 使用新浪微博SDK
    IOS 解析歌词lrc
    IOS 通过button获取cell
    IOS 解析XML文档
    OC .(点)与->(箭头)用法区别
    黑苹果安装合集
    Hello,World
  • 原文地址:https://www.cnblogs.com/WonKerr/p/GCC_IBM_AIX.html
Copyright © 2020-2023  润新知