QCompare的未定义符号

jls*_*ker 6 qt qtestlib

使用QTestLib构建测试时,我得到一个qCompare函数的"未定义符号"错误:

Undefined symbols for architecture x86_64:
  "__ZN5QTest8qCompareIimEEbRKT_RKT0_PKcS8_S8_i", referenced from:
      __ZN15MyTestClass22myTestFunctionEv in MyTestClass.o
Run Code Online (Sandbox Code Playgroud)

jls*_*ker 6

您可以通过c++filt在shell命令中传递它来解密受损的符号:

echo __ZN5QTest8qCompareIimEEbRKT_RKT0_PKcS8_S8_i | c++filt
Run Code Online (Sandbox Code Playgroud)

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

bool QTest::qCompare<int, unsigned long>(int const&, unsigned long const&, char const*, char const*, char const*, int)
Run Code Online (Sandbox Code Playgroud)

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

  • ...所以解决方法是static_cast类型,或者,如果是literals,使用"0ul"等使用正确的类型. (2认同)