Я скачал snappy 1.1.8 на здесь и следую инструкциям по чтению для компиляции на моем компьютере,
mkdir build
cd build && cmake ../
, затем я открываю файл .sln
в VS2015, создаю lib
, ошибок нет.
, затем я пишу пример, как показано ниже, и добавляю lib
для моего проекта:
class Sna
{
public:
Sna(string &data) :data_(data)
{
}
void compress()
{
auto start = high_resolution_clock::now();
snappy::Compress(data_.data(), data_.size(), &compressed_);
auto end = high_resolution_clock::now();
cout << "compress use time: " << duration_cast<microseconds>(end - start).count() << " microseconds" << endl;
}
void unCompress()
{
auto start = high_resolution_clock::now();
snappy::Uncompress(compressed_.data(),compressed_.size(),&recoverd_);
auto end = high_resolution_clock::now();
cout << "unCompress use time: " << duration_cast<microseconds>(end - start).count() << " microseconds" << endl;
}
bool check()
{
return !data_.compare(recoverd_) ? true : false;
}
double ratio()
{
int temp = int(data_.length() - compressed_.length());
double d = (double)temp / data_.length();
return d * 100;
}
private:
string data_, compressed_, recoverd_;
};
int main()
{
//read data from file
//...
Sna sna(data);
sna.compress();
sna.unCompress();
return 0;
}
функция compress
в порядке, но при выполнении функции unCompress
программа завершилась сбоем, она выдала мне эту ошибку:
0xC000001D: недопустимая инструкция。
на snappy.cc
строке 720:
#if SNAPPY_HAVE_BMI2
return _bzhi_u32(v, 8 * n);
Я пробовал:
- резервная версия snappy 1.1.7, у меня это хорошо работает, такой проблемы нет.
- при компиляции библиотеки, установите
Enable Enhanced Instruction Set
в Advanced Vector Extensions 2 (/arch:AVX2)
, но у него все еще были другие проблемы.
Я не знаю, какой шаг я сделал неправильно? и как решить эту проблему?