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++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造