贝贝花花包包店,精品555皮具,钱夹,皮夹

字体:  

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

居然要登录 发表于: 2008-3-09 19:39 来源: ACE 开发者

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位下该调用则正常

请教下有经验的前辈,该问题是什么原因导致,是否是因为编译库的时候编译选项或者编译宏问题?

最新回复

peakzhang at 2008-3-11 16:05:12
有可能是编译宏、选项的问题。
64位处理一些数据类型的时候,和32位有差别。
居然要登录 at 2008-3-11 21:48:55
是编译选项的问题,根据HP工程师的说法,在HP下编译多线程库和应用,只须加-mt选项,链接无须-lpthread, 在HP系统下为了兼容以前版本存在两个pthread库, 如果链接错误会导致应用起线程异常。
babyblue_993 at 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
居然要登录 at 2008-3-12 22:27:32

QUOTE:

原帖由 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 编辑 ]