【问题标题】:Runtime c++ "undefined symbol" exception运行时 C++“未定义符号”异常
【发布时间】:2012-05-08 19:45:42
【问题描述】:

我得到一个实际正在执行的方法的未定义符号异常。这对我来说毫无意义。以下是日志示例:

/src/CustomerReturnProcessUtils/labelPrintUtils/CreturnLabelPrinter.cpp:402 (null)(): CreturnLabelPrinter: [InitializeZebraPrint] 连接套接字成功 /apollo/env/CustomerReturnUIServiceUS/bin/CustomerReturnUIService:符号查找错误:/apollo/env/CustomerReturnUIServiceUS/bin/CustomerReturnUIService:未定义符号:_ZN19CreturnLabelPrinter10PrintLabelESSSsiiiSsbSs

“成功连接到套接字”由 CreturnLabelPrinter::PrintLabel 内部的方法调用记录...我怎样才能获得未定义的符号异常?这是一种非静态方法。它的代码不相关(无论如何我都不能在这里发布)......我只是想知道这可能发生在什么条件下。在这些模块的编译和链接过程中,我没有看到任何问题。调用方法与“未定义符号”位于不同的库中。

【问题讨论】:

  • 您是否查看过CreturnLabelPrinter.cpp 第402 行的代码,看看它在做什么?至少在我读到它的时候,未定义的符号是 ZN19CreturnLabelPrinter10PrintLabelESsSsiiiSsbSs (它看起来很像一个错位的名称,所以它可能类似于 CReturnLablePrinter::PrintLabel (或者,很可能,更复杂的东西,但你明白了一般的想法)。

标签: c++ compiler-construction linker undefined-symbol


【解决方案1】:

当我有两个版本的库并且我链接到错误的版本时,这发生在我身上。还 c++filt 显示:

$ c++filt __ZN19CreturnLabelPrinter10PrintLabelESsSsiiiSsbSs
CreturnLabelPrinter::PrintLabel(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int, int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)

这有很多参数,你检查了吗?

【讨论】:

  • 我不认为这是库版本问题 - 这是我添加到库中的全新源文件,因此如果我使用了错误的版本,它将根本无法工作。不过,我会仔细检查参数。
  • 我也有一个新的源文件(实际上是一个应用程序),它与使用调试标志编译的库链接。所以应用程序的编译通过了,执行失败了,就像你描述的那样..
猜你喜欢
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
相关资源
最近更新 更多