防止GNU / Linux上的共享库版本不兼容

时间:2013-01-03 15:08:45

标签: linux shared-libraries llvm incompatibility

我一直在跟踪我的程序启动时触发的错误。这是gdb提供的回溯:

(gdb) bt
#0  0xb753f571 in llvm::cl::parser<llvm::FunctionPass* (*)()>::getOption(unsigned int) const () 
from ./libgdl.so
#1  0xb79aeab4 in llvm::cl::generic_parser_base::findOption(char const*) ()   
from ./libgdl.so
#2  0xb753f679 in llvm::RegisterPassParser<llvm::RegisterRegAlloc>::NotifyRemove(char const*) () 
from ./libgdl.so
#3  0xaf35f0b6 in llvm::MachinePassRegistry::Add(llvm::MachinePassRegistryNode*) () from /usr/lib
/i386-linux-gnu/libLLVM-3.1.so.1
#4  0xaef42b16 in ?? () from /usr/lib/i386-linux-gnu/libLLVM-3.1.so.1
#5  0xb7fece9b in ?? () from /lib/ld-linux.so.2

事实上,崩溃是由于系统使用LLVM 3.1(用于图形相关任务),而我正在使用LLVM 3.0,它嵌入在我的程序中(libgdl.so):
当libLLVM-3.1.so.1想要调用NotifyRemove函数时,调用将转发到我在libgdl.so中的LLVM版本,并且由于版本不兼容而导致崩溃。

有没有办法防止这么乱?

0 个答案:

没有答案