我目前遇到了一些已成功编译成 .so 文件的代码。当我尝试将我的库链接到某些代码时,如果失败并显示以下语句:
undefined symbol: _ZrSRKN5CORBA3AnyERPN3RTT5corba4Math7MatrixdE
我能得到的唯一有用的信息是,有一个对象或函数使用以下类型:“CORBA::Any”(常规 corba 类型)和“RTT::corba::Math::Matrixd”(一种使用一个 hh 文件和两个 cc 文件定义的类型)。
我有兴趣知道该符号在我的代码中到底在哪里生成以及为什么找不到它。我怀疑它代表了我的 cc 文件之一中定义的函数,因此这是我编译整个内容的方式:
g++ -I{CORBA includes} main.cpp one.cc two.cc -L{CORBA libraries}
我应该遵循什么调试流程?
最佳答案
在 Unix 环境中 c++filt将在您的系统上可用,这就是您如何使用它来解析函数名称:
c++filt _ZrSRKN5CORBA3AnyERPN3RTT5corba4Math7MatrixdE
我刚刚使用了c++filtjs
因为它同时支持 g++
和 msvc++
,所以它返回的是:
operator>>=(CORBA::Any const&, RTT::corba::Math::Matrixd*&)
关于c++ - 如何追踪 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18357717/