Я обнаружил, трудный путь , что по крайней мере boost::program_options
зависит от выравнивания элементов структуры, сконфигурированного компилятором.
Если вы создаете boost с использованием настроек по умолчанию и связываете его с проектом, используя выравнивание по 4 байта (/Zp4
), он потерпит неудачу во время выполнения (сделал минимальный тест с program_options). Boost сгенерирует утверждение, указывающее на возможное неправильное соглашение о вызовах, но настоящей причиной является выравнивание элементов структуры.
Есть ли способ предотвратить это? Если выравнивание делает код несовместимым, разве это не должно быть включено в именование библиотеки?