我一直在努力解决这个问题,到目前为止还无法实现。使用botan的简单main可以很好地工作,但当我将相同的代码放入单元测试时,它会失败。
// keygeneration_test.cpp
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp> // shuold use this one if using dynamic linking
#include <botanbotan.h>
#include <botanrsa.h>
BOOST_AUTO_TEST_SUITE(keygeneration_suite)
BOOST_AUTO_TEST_CASE(rsa_key_generation)
{
BOOST_TEST_MESSAGE("generating key");
try
{
Botan::LibraryInitializer init;
Botan::AutoSeeded_RNG rng;
rng.reseed(10096);
Botan::RSA_PrivateKey rsaPrivate(rng, 1024);
}
catch (std::exception& e)
{
BOOST_TEST_MESSAGE(e.what());
}
}
BOOST_AUTO_TEST_SUITE_END()
--
// main.cpp
#define BOOST_TEST_DYN_LINK
#define BOOST_TEST_MODULE cryptography test //module define should be only here, it takes care of creating entry point
#include <boost/test/unit_test.hpp> // should use this one if using dynamic linking
然后我尝试将init放在主入口点中,如下所示:
//main.cpp
#define BOOST_TEST_DYN_LINK // Make the exe link dynamically
#define BOOST_TEST_NO_MAIN
#include <boost/test/unit_test.hpp> // should use this one if using dynamic linking
#include <botanbotan.h>
bool init_function()
{
return true;
}
int main(int argc, char* argv[])
{
Botan::LibraryInitializer init;
return boost::unit_test::unit_test_main(&init_function, argc, argv);
}
它们都显示了相同的错误:
正在运行1个测试用例。。。未知位置(0):中的致命错误"rsa_key_generation":地址处发生内存访问冲突0x00141000,在尝试读取无法访问的数据时
***在测试套件"加密测试"中检测到1个故障检测到内存泄漏!正在转储对象->{670}正常块0x0000000000221380,16字节长。数据:78 EA 13对象转储完成。
只是为了记录在案,我尝试过的一个简单的压缩测试或我所做的任何事情都很好,但当我尝试创建一个带有botan初始化的测试时,无论我尝试什么,它都会失败
编辑:我尝试过Qt测试,结果也是如此。这真的很奇怪。有人经历过这样的事情吗?有人能复制这个吗
发现了令人讨厌的问题。代码生成已设置为多线程调试DLL。由于某些原因,更改为多线程DLL使其工作。我想可能是因为botan是为发布而编译的。(最好能从编译器那里得到提示或建议…)