c++ - 如何追踪 undefined symbol

标签 c++ compilation linker corba

我目前遇到了一些已成功编译成 .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/

相关文章:

c++ - 鼠标世界坐标 Box2D

c# - 将 C# Byte[] 传递给 C++ API

c++ - 在 C++ 中链接到 libredwg 不起作用

编译给出与 Windows 编译器不同的结果

c++ - 使用 g++ 编译多个 .cpp 和 .h 文件。我做对了吗?

C++ Boost 库链接器找不到,不会编译

templates - GCC(/Clang) : Merging functions with identical instructions (COMDAT folding)

c++ - C++异常的核心优势

C++ Linux 与另一个程序交互 stdin/stdout

c++ - 如何在ROOT下编译多个文件