求解:Aix5.2系统中dlopen错误,dlerror返回“Bad Address”

fu256 2006-11-02 01:25:43
测试程序过程中突然出现这个问题,把之前备份的bin文件和so文件恢复还是出错,bin文件是个守护进程,测试时经常打开关闭,怀疑时系统的问题。不知有没有哪位遇见过这个问题?
...全文
536 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
fu256 2006-11-27
  • 打赏
  • 举报
回复
这个问题要重启AIX才能解决.
Andrionda 2006-11-02
  • 打赏
  • 举报
回复
HPUX平台上,无论是PA-RISC还是IA64架构上,都存在共同的问题:

链有线程库libpthread.so的lib,在dlopen的时候经常会报错,如tclsh在load liboratcl.so的时候[如下实际上是一个dlopen的过程],报告如下错误:

-bash-3.00$ tclsh
% package require Oratcl
/usr/lib/hpux32/dld.so: Cannot dlopen load module '/usr/lib/hpux32/libpthread.so.1' because it contains thread specific data.
/usr/lib/hpux32/dld.so: Cannot dlopen load module '/usr/lib/hpux32/libpthread.so.1' because it contains thread specific data.
couldn't load file "/usr/local/lib/oratcl4.1/../liboratcl4.1.sl": exec format error
%




解决办法:

可以说,在HP平台上,除了LD_PRELOAD之外,没有更好的解决办法(关于LD_PRELOAD大家可以查找相应的资料来了解,这里不作过多的解释):

-bash-3.00$ echo "export LD_PRELOAD=/usr/lib/hpux32/libpthread.so.1" >> .profile
-bash-3.00$ . .profile
-bash-3.00$ tclsh
% package require Oratcl
4.1
% info command
oralogon tell socket subst open eof oraplexec pwd oraopen glob list exec
...........
%

进而以上关于本地线程存储的问题通过LD_PRELAD得以解决。

注:同样的问题在Solaris平台上也是存在的,比如链接lilbmtmalloc.so的时候,解决方法类似:libpthread.so->libmtmalloc.so
Andrionda 2006-11-02
  • 打赏
  • 举报
回复
Ding

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧