【发布时间】:2018-01-18 12:14:42
【问题描述】:
我有一个为 x86 和 arm (rpi2) 编译的程序。我正在使用 boost 进行 crc 实现,但在 arm 平台上失败时遇到了问题。
调试后,我发现 crc 计算在 arm 上关闭。我写了这些小测试用例来查明问题:
namespace
{
unsigned char const data[] = { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39 };
std::size_t const data_len = sizeof(data) / sizeof(data[0]);
uint16_t const expected = 0x29B1;
}
BOOST_AUTO_TEST_CASE(test_non_optimized){
boost::crc_basic<16> crc_basic(0x1021, 0xFFFF, 0, false, false);
crc_basic.process_bytes(data, data_len);
BOOST_CHECK_EQUAL(crc_basic.checksum(), expected);
}
BOOST_AUTO_TEST_CASE(test_optimized) {
boost::crc_optimal<16, 0x1021, 0xFFFF, 0, false, false> crc_optimal;
crc_optimal.process_bytes(data, data_len);
BOOST_CHECK_EQUAL(crc_optimal.checksum(), expected);
}
BOOST_AUTO_TEST_CASE(test_function) {
uint16_t checksum = boost::crc<16, 0x1021, 0xFFFF, 0, false, false>(data, data_len);
BOOST_CHECK_EQUAL(checksum, expected);
}
所有三个测试用例都通过 x86。但是在 arm 上只有 crc_basic 测试通过。另外两个失败:
test/boost_crc_test.cpp(41): check crc_optimal.checksum() == expected has failed [29299 != 10673]
test/boost_crc_test.cpp(46): check checksum == expected has failed [29299 != 10673]
Boost 版本 1.63.0
编译器:gcc (GCC) 6.3.1 20170109
我很惊讶在 boost 中遇到这样的事情。关于造成这种情况的任何想法?
【问题讨论】: