vcpkg: Укажите выравнивание члена структуры
У меня есть старый код, который скомпилирован с упаковкой в 1 байт (аргумент /Zp1
) Struct Member Alignment, и я добавляю к ним модульное тестирование с помощью gTest. я используюvcpkg
для установки gTest, но он скомпилирован с использованием по умолчанию 8-байтовой упаковки. Я нахожусь в Windows с VS2019.
Можно ли указать, какую упаковку использовать (параметр /Zp
) с vcpkg
?
1 ответ
Поскольку невозможно изменить выравнивание элементов структуры библиотек во время компиляции: мне пришлось изменить свой код, чтобы использовать разные выравнивания упаковки при включении заголовков этих библиотек.
Везде, где я использую заголовки gTest или других библиотек, предоставленных , я заключаю их в
#pragma pack(push, n)
а также
#pragma pack(pop)
. Значение
n
зависит от настроек по умолчанию, которые в моем случае
8
.
// project specific headers
#include "version.hxx"
// 3rd party libraries (provided by vcpkg)
#pragma pack(push, 8)
#include <gtest/gtest.h>
#include <gtest/gmock.h>
#pragma pack(pop)
// STL
#include <vector>
using std::vector;
Это не лучшее решение, но, по крайней мере, обходной путь для использования
vcpkg
с кодом, который использует другое выравнивание упаковки.