HP-UX 动态库
2010-07-19 18:03
253 查看
HP-UX使用了很多动态库,在应用开发时也常常需要编译动态库。本文就动态库相关问题做些初步探讨。
1、 编译
HP-UX编译为动态库非常简单,只需要加参数-b,而参数+z/+Z是为了生成位置无关代码(PIC position independent code)。
2、 使用
使用动态库的方式有多种
1) 类似静态库方式编译,直接用-L -l的方式在编译选项中指定。需要注意的是在HP9000下32位应用会将动态库的绝对路径加进去,而在IA和64位的PA下只包含文件名。
如果同时有静态库和动态库,缺省优先使用动态库,在PA下aCC加选项可以使用静态库,而在IA下需要使用-minshared(IA下有更多选项,如-Wl,-aarchive_shared,可以参考aCC和ld手册)
2) 程序中通过dl系列函数调用(包括dlopen、dlsym等),详细使用方法可参考相关手册。
3、 环境变量
环境变量主要包括:SHLIB_PATH和LD_LIBRARY_PATH,SHLIB_PATH在32/64位的PA/IA均有效,LD_LIBRARY_PATH只在64位的PA和32/64位的IA中有效。
通过chatr可以看到32位PA缺省顺序是SHLIB_PATH、embedded path,而且均为disable,而64位PA和32/64位IA缺省顺序依次是LD_LIBRARY_PATH、SHLIB_PATH、 embedded path,而且均为enable。
链接时如果加+s选项可以使之enable,+b$path则使embedded path成为enable并设置path(注:此处path指要设置的目录,和系统的PATH环境变量没有关系)。如果直接用cc/aCC编译为执行码则用选项-Wl,+s和-Wl,+b如
cc test.c –Wl,+s –Wl,+b/opt/testlib
4、 运行问题
在讨论运行问题时,简单介绍一下chatr,通过chatr ./a.out可以查看a.out的许多属性,在本文中关心的主要有(如果完全没有动态库,下述选项将看不到)
1) shared library dynamic path search 动态库搜索设置,包括是否使用相关环境变量
2) shared library list:动态库的列表,32位PA程序包含路径
3) shared library binding:绑定方式
从3可以看出,32位的PA程序,如果编译环境与运行环境不一致的话,很容易导致报告动态库无法找到,可以采用如下解决办法:
1) 模拟编译环境(或者编译环境按照运行环境设置),建立一些必要的软链接(具体有哪些库可以通过shared library list看到)
2) 设置SHLIB_PATH环境变量,并且通过chatr +s enable使之可用或者通过chatr +b enable使embedded path可用,+s和+b的顺序决定了搜索的顺序
3) 链接时使用+s和+b选项,其中+b选项指定的目录不要求在编译环境一定存在
而对于64位PA和32/64位IA因为缺省选项都是enable,一般只要在LD_LIBRARY_PATH或者SHLIB_PATH中增加相应环境变量就可以了。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hanxin1987216/archive/2009/09/04/4518000.aspx
1、 编译
HP-UX编译为动态库非常简单,只需要加参数-b,而参数+z/+Z是为了生成位置无关代码(PIC position independent code)。
2、 使用
使用动态库的方式有多种
1) 类似静态库方式编译,直接用-L -l的方式在编译选项中指定。需要注意的是在HP9000下32位应用会将动态库的绝对路径加进去,而在IA和64位的PA下只包含文件名。
如果同时有静态库和动态库,缺省优先使用动态库,在PA下aCC加选项可以使用静态库,而在IA下需要使用-minshared(IA下有更多选项,如-Wl,-aarchive_shared,可以参考aCC和ld手册)
2) 程序中通过dl系列函数调用(包括dlopen、dlsym等),详细使用方法可参考相关手册。
3、 环境变量
环境变量主要包括:SHLIB_PATH和LD_LIBRARY_PATH,SHLIB_PATH在32/64位的PA/IA均有效,LD_LIBRARY_PATH只在64位的PA和32/64位的IA中有效。
通过chatr可以看到32位PA缺省顺序是SHLIB_PATH、embedded path,而且均为disable,而64位PA和32/64位IA缺省顺序依次是LD_LIBRARY_PATH、SHLIB_PATH、 embedded path,而且均为enable。
链接时如果加+s选项可以使之enable,+b$path则使embedded path成为enable并设置path(注:此处path指要设置的目录,和系统的PATH环境变量没有关系)。如果直接用cc/aCC编译为执行码则用选项-Wl,+s和-Wl,+b如
cc test.c –Wl,+s –Wl,+b/opt/testlib
4、 运行问题
在讨论运行问题时,简单介绍一下chatr,通过chatr ./a.out可以查看a.out的许多属性,在本文中关心的主要有(如果完全没有动态库,下述选项将看不到)
1) shared library dynamic path search 动态库搜索设置,包括是否使用相关环境变量
2) shared library list:动态库的列表,32位PA程序包含路径
3) shared library binding:绑定方式
从3可以看出,32位的PA程序,如果编译环境与运行环境不一致的话,很容易导致报告动态库无法找到,可以采用如下解决办法:
1) 模拟编译环境(或者编译环境按照运行环境设置),建立一些必要的软链接(具体有哪些库可以通过shared library list看到)
2) 设置SHLIB_PATH环境变量,并且通过chatr +s enable使之可用或者通过chatr +b enable使embedded path可用,+s和+b的顺序决定了搜索的顺序
3) 链接时使用+s和+b选项,其中+b选项指定的目录不要求在编译环境一定存在
而对于64位PA和32/64位IA因为缺省选项都是enable,一般只要在LD_LIBRARY_PATH或者SHLIB_PATH中增加相应环境变量就可以了。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hanxin1987216/archive/2009/09/04/4518000.aspx
相关文章推荐
- HP-UX 动态库
- hp-ux pseudo-swap(伪交换分区)浅析
- 使用gSOAP开发实例(6) 在HP-UX下编译gSOAP-2.7.17
- HP-UX /usr 扩容
- HP-UX 的内存交换机制--交换Swap与伪交换Pseudo swap
- HP-UX系统日志文件
- hp-ux 11.23挂载ISO文件
- HP-UX扩充磁盘空间的步骤
- [HP-UX]清空FIN_WAIT_2的连接
- HP-UX下如何获取HBA光纤卡的WWN号
- hp-ux 创建lv 实例
- HP-UX的某些特性
- HP-UX匿名ftp的upload权限问题
- HP-UX实战: Apache2 + Tomcat 4.1.18 + Subversion + axis
- HP-UX 常用命令速查
- HP-UX 11i 版本名稱與版本識別碼
- HP-UX:Route 添加启动静态路由
- 查看HP-UX内核参数命令
- HP-UX技术文档库精选(转)
- 主机动手系列 — 不同CPU,不同命令,怎么管理HP-UX服务器