如何追踪未定义的符号

How to track down an undefined symbol

本文关键字:未定义 符号 追踪 何追踪      更新时间:2023-10-16

我目前被一些成功编译到.so文件中的代码卡住了。当我尝试将我的库链接到某些代码时,如果失败,请使用以下语句:

未定义符号:_ZrSRKN5CORBA3AnyERPN3RTT5corba4Math7MatrixdE

我能得到的唯一有用的信息是,某个对象或函数使用以下类型:"CORBA::Any"(一种常规的CORBA类型)和"RTT::CORBA::Math::Matrixd"(一个使用一个hh文件和两个cc文件定义的类型)。

我很想知道在我的代码中,这个符号是在哪里生成的,以及为什么找不到它。我怀疑它代表了在我的一个cc文件中定义的一个函数,所以下面是我如何编译整个东西的:

g++-I{CORBA包含}main.cpp one.cc two.cc-L{CORBA库}

我应该遵循什么调试过程?

在Unix环境中,c++filt将在您的系统上可用,这就是您使用它来分解函数名的方法:

c++filt _ZrSRKN5CORBA3AnyERPN3RTT5corba4Math7MatrixdE

我刚刚使用了c++filtjs,因为它同时支持g++msvc++,所以它返回时是这样的:

operator>>=(CORBA::Any const&, RTT::corba::Math::Matrixd*&)