求教 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下简直是一个噩梦经历
补上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]