Как собрать snappy на windows 10 в VS2015? - PullRequest
0 голосов
/ 06 апреля 2020

Я скачал 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);

Я пробовал:

  1. резервная версия snappy 1.1.7, у меня это хорошо работает, такой проблемы нет.
  2. при компиляции библиотеки, установите Enable Enhanced Instruction Set в Advanced Vector Extensions 2 (/arch:AVX2), но у него все еще были другие проблемы.

Я не знаю, какой шаг я сделал неправильно? и как решить эту проблему?

1 Ответ

0 голосов
/ 07 апреля 2020

Благодаря @rpress решил эту проблему.

нашел файл CMakeLists.txt. И закомментировал строки 118-112, как показано ниже

# check_cxx_source_compiles("
# #include <immintrin.h>
# int main() {
#   return _bzhi_u32(0, 1);
# }" SNAPPY_HAVE_BMI2)
...