1

我一直在跟踪我的程序启动时触发的错误。这是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(用于图形相关任务),而我使用的是嵌入在我的程序 (libgdl.so) 中的 LLVM 3.0:
当 libLLVM-3.1.so.1 想要调用NotifyRemove 函数,调用被转发到我在 libgdl.so 中的 LLVM 版本,并且由于版本不兼容而导致崩溃。

有什么办法可以防止这样的混乱吗?

4

0 回答 0