【发布时间】:2016-11-22 17:09:47
【问题描述】:
我遇到了一个有趣的问题。我正在编译我的应用程序代码,并在我的 centos 6 机器上使用 ace 库(version 6_1_1)。一切正常。当我查看在 centos 6 机器上编译的 ace 库的符号时,它看起来像这样:
bash-4.1$ nm ace/libACE.so.6.1.1 | grep handle_sig 000f9430 T _ZN15ACE_Sig_Adapter13handle_signalEiP7siginfoP8ucontext 000b84d0Ť_ZN17ACE_Event_Handler13handle_signalEiP7siginfoP8ucontext 00079f10Ť_ZN18ACE_Service_Config13handle_signalEiP7siginfoP8ucontext 000f26d0Ť_ZN19ACE_Process_Manager13handle_signalEiP7siginfoP8ucontext 0007ee70Ť_ZN19ACE_Service_Manager13handle_signalEiP7siginfoP8ucontext 000cf920吨 _ZN20ACE_MMAP_Memory_Pool13handle_signalEiP7siginfoP8ucontext 000f8b80 T _ZN22ACE_Shared_Memory_Pool13handle_signalEiP7siginfoP8ucontext bash-4.1$
但是当我在 centos 7 机器上编译同一个项目时,符号发生了变化:
bash# nm ace/6_1_1/ace/libACE.so.6.1.1 | grep handle_sig 000fa090 T _ZN15ACE_Sig_Adapter13handle_signalEiP9siginfo_tP8ucontext 000b9570 T _ZN17ACE_Event_Handler13handle_signalEiP9siginfo_tP8ucontext 0007e070 T _ZN18ACE_Service_Config13handle_signalEiP9siginfo_tP8ucontext 000f3500 T _ZN19ACE_Process_Manager13handle_signalEiP9siginfo_tP8ucontext 00081cb0 T _ZN19ACE_Service_Manager13handle_signalEiP9siginfo_tP8ucontext 000d1990 T _ZN20ACE_MMAP_Memory_Pool13handle_signalEiP9siginfo_tP8ucontext 000f93d0 T _ZN22ACE_Shared_Memory_Pool13handle_signalEiP9siginfo_tP8ucontext bash#
请注意,siginfo 中有一个额外的 _t。所以,我链接这个库的应用程序在运行时无法启动给我这个错误:
符号“_ZN17ACE_Event_Handler13handle_signalEiP9siginfo_tP8ucontext” 没找到
另一个值得注意的有趣点是,如果我将编译好的 ace 库从我的 centos 6 盒子 复制到 centos 7 盒子,我的应用程序可以正常工作。
我不知道如何解决这个问题。在这方面的任何帮助将不胜感激!
【问题讨论】:
标签: dynamic dll compilation shared-libraries