【问题标题】:Undefined symbols for QCompareQCompare 的未定义符号
【发布时间】:2012-12-21 08:39:25
【问题描述】:

使用 QTestLib 构建测试时,qCompare 函数出现“未定义符号”错误:

Undefined symbols for architecture x86_64:
  "__ZN5QTest8qCompareIimEEbRKT_RKT0_PKcS8_S8_i", referenced from:
      __ZN15MyTestClass22myTestFunctionEv in MyTestClass.o

【问题讨论】:

    标签: qt qtestlib


    【解决方案1】:

    您可以通过在 shell 命令中通过c++filt 来破译损坏的符号:

    echo __ZN5QTest8qCompareIimEEbRKT_RKT0_PKcS8_S8_i | c++filt
    

    ... 打印这样的 C++ 函数签名:

    bool QTest::qCompare<int, unsigned long>(int const&, unsigned long const&, char const*, char const*, char const*, int)
    

    QCOMPARE 宏的两个参数——即qCompare 函数的两个模板参数——必须具有完全相同的类型。例如,如果一个是int 而另一个是size_t,则会出现错误。

    【讨论】:

    • ...所以解决方案是静态转换类型,或者在文字的情况下,使用“0ul”等使用正确的类型。
    • 仅供参考:这似乎不再是 Qt 最新版本的问题(在 Ubuntu 18.04 上仍然可以看到该错误,而在 Ubuntu 20.04 上它消失了)。
    猜你喜欢
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 2019-05-13
    • 2020-01-27
    • 2012-05-29
    • 1970-01-01
    相关资源
    最近更新 更多