chendh 发表于 2009-5-6 19:50:24

求教 ACE 在AIX的安装与编译

最近一直在弄AIX下的ACE环境,
我用的是ACE5.6.1系统是是AIX5.3   

安装包放在$HOME/ACE下,   安装目录是$HOME/ace
编译过程没问题. 用../configure --prefix=$HOME/ace产生的makefile , 编译时间长, 忍了,
我使用了ACEXML,

这中间发现了几个问题, 请教各位,

1.编译应用程序时,包含的头文件不能用安装目录里的头文件, (安装目录里的文件不完整)

2.直接编译出来的libACE.a (.so)无法使用, 应用程序会core在ACE_Thread_Manager::instance ()->wait(); 上
   需要在configure 里面修改LDFLAGS解决

简要代码如下

ACE_Thread_Manager::instance ()->spawn_n (
            maxthreads, event_loop,
            ACE_Reactor::instance (),
            THR_NEW_LWP|THR_DETACHED);
return ACE_Thread_Manager::instance ()->wait();

static ACE_THR_FUNC_RETURN event_loop (void *arg) {
ACE_Reactor *reactor = static_cast<ACE_Reactor *> (arg);

/*反应器开始事件检测循环*/
reactor->owner (ACE_OS::thr_self ());
reactor->run_reactor_event_loop ();
return 0;
}

3.默认编译出来的libACEXML.a 依赖libACE.a , 这个依赖是以绝对路径搜索的,
    就是说, 如果我把$HOME/ace 拷贝到另外一个用户目录下, 那么, 应用程序将无法运行. 其依赖的libACEXML.a 所依赖的libACE.a 找不到
虽然libACE.a 在LIBPATH的搜索路径下.


最近这个月使用ACE的感受, 在AIX下简直是一个噩梦经历

chendh 发表于 2009-5-6 19:53:49

补上core时的调用栈

GXP_LBS.notify(ACE_Event_Handler*,unsigned long,ACE_Time_Value*)(??, ??, ??, ??), line 213 in "Select_Reactor_T.cpp"
GXP_LBS.sleep_hook()(??), line 62 in "Reactor_Token_T.cpp"
shared_acquire(void(*)(void*),void*,ACE_Time_Value*,ACE_Token::ACE_Token_Op_Type)(0x2ff22770, 0x0, 0x0, 0x0, 0x2), line 254 in "Token.cpp"
Token.acquire(ACE_Time_Value*)(0x2ff22770, 0x0), line 341 in "Token.cpp"
GXP_LBS.acquire()(??), line 11 in "Guard_T.inl"
GXP_LBS.ACE_Guard(ACE_Reactor_Token_T<ACE_Token>&)(??, ??), line 38 in "Guard_T.inl"
GXP_LBS.close()(??), line 565 in "Select_Reactor_T.cpp"
GXP_LBS.~ACE_Select_Reactor_T()(??, ??, ??), line 609 in "Select_Reactor_T.cpp"
GXP_LBS.~ACE_TP_Reactor()(??, ??, ??), line 215 in "memory"
main(argc = 0, argv = (nil)), line 560 in "GXP_LBS.cpp"
页: [1]
查看完整版本: 求教 ACE 在AIX的安装与编译