プログラムの起動時に発生したバグを追跡しています。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 を使用している
場合です: NotifyRemove 関数を使用すると、呼び出しは libgdl.so の LLVM のバージョンに転送され、バージョンに互換性がないためクラッシュにつながります。
このような混乱を防ぐ方法はありますか?