C++编程-HP-UX动态库路径相关问题

2024-04-20 00:18

本文主要是介绍C++编程-HP-UX动态库路径相关问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  原帖子网址:http://h50237.www5.hp.com/PartnerPortal/Forum/Messages/ShowTopic.aspx?AID=70ba04a9-c458-4130-8c5e-b04fd6193c1b。
        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中增加相应环境变量就可以了。

这篇关于C++编程-HP-UX动态库路径相关问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/918825

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

linux下多个硬盘划分到同一挂载点问题

《linux下多个硬盘划分到同一挂载点问题》在Linux系统中,将多个硬盘划分到同一挂载点需要通过逻辑卷管理(LVM)来实现,首先,需要将物理存储设备(如硬盘分区)创建为物理卷,然后,将这些物理卷组成... 目录linux下多个硬盘划分到同一挂载点需要明确的几个概念硬盘插上默认的是非lvm总结Linux下多

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

pip install jupyterlab失败的原因问题及探索

《pipinstalljupyterlab失败的原因问题及探索》在学习Yolo模型时,尝试安装JupyterLab但遇到错误,错误提示缺少Rust和Cargo编译环境,因为pywinpty包需要它... 目录背景问题解决方案总结背景最近在学习Yolo模型,然后其中要下载jupyter(有点LSVmu像一个

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo