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