找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4472|回复: 4

HP 64位机器编译ACE库 使用Task activate线程失败问题

[复制链接]
发表于 2008-3-9 19:39:56 | 显示全部楼层 |阅读模式
GNU文件使用platform_hpux_aCC.GNU(修改buildbits=64), config使用config-hpux-11.00.h,  ACE版本5.4/5.5
编译选项未做任何变动

使用编译成功的库测试,发现Task activate线程会失败,单步调试跟到OS_NS_Thread.cpp文件中的ACE_OS::thr_create调用中
if(::thread_attr_init(&attr)!=0) return -1;

经验证,如果buildbits=32, 在32位下该调用则正常

请教下有经验的前辈,该问题是什么原因导致,是否是因为编译库的时候编译选项或者编译宏问题?
发表于 2008-3-11 16:05:12 | 显示全部楼层
有可能是编译宏、选项的问题。
64位处理一些数据类型的时候,和32位有差别。
 楼主| 发表于 2008-3-11 21:48:55 | 显示全部楼层
是编译选项的问题,根据HP工程师的说法,在HP下编译多线程库和应用,只须加-mt选项,链接无须-lpthread, 在HP系统下为了兼容以前版本存在两个pthread库, 如果链接错误会导致应用起线程异常。
发表于 2008-3-11 22:55:07 | 显示全部楼层

个人看法

应该是在makefile中把distrib设为1,buildbits设为64吧?
理由如下,看样子只有在distrib为1的时候,才会选择正确的库吧?
ifeq ($(distrib),1)

ifeq ($(word 2,$(HPVERS_WORDS)), 10)
SOFLAGS         += -Wl,-x -Wl,+h/usr/lib/$(@F)
else
ifeq ($(buildbits),32)
SOFLAGS         += -Wl,-x -Wl,+h$(@F) -Wl,+b/usr/lib
endif
ifeq ($(buildbits),64)
SOFLAGS         += -Wl,-x -Wl,+h$(@F) -Wl,+b/usr/lib/pa20_64
endif
endif

endif
 楼主| 发表于 2008-3-12 22:27:32 | 显示全部楼层
原帖由 babyblue_993 于 2008-3-11 22:55 发表
应该是在makefile中把distrib设为1,buildbits设为64吧?
理由如下,看样子只有在distrib为1的时候,才会选择正确的库吧?
ifeq ($(distrib),1)

ifeq ($(word 2,$(HPVERS_WORDS)), 10)
SOFLAGS         += -Wl,-x -Wl,+h/usr/ ...

SOFLAGS似乎没什么用途, 不用distrib为1,只要buildbits=64就OK,因为带了-mt, 会自动选择正确的库。
lld查下生成库的依赖关系就知道

[ 本帖最后由 居然要登录 于 2008-3-13 22:57 编辑 ]
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-25 12:03 , Processed in 0.021468 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表