Должна ли библиотека повышения зависеть от выравнивания элементов структуры?

Я нашел трудным путем, что по крайней мере boost::program_options зависит от настроенного компилятором выравнивания элементов структуры.

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

Есть ли способ предотвратить это? Если выравнивание делает код несовместимым, разве это не должно быть включено в именование библиотеки?

1 ответ

Решение

Вы должны убедиться, что ваша программа и библиотеки, с которыми вы связываетесь, имеют одинаковый ABI.

Количество переключателей компилятора, которые могут изменять ABI классов и функций C++, может быть слишком большим, поэтому, очевидно, проблема состоит в том, чтобы назвать более 3000 комбинаций.

Вы можете посмотреть здесь для более подробного обоснования.

Другие вопросы по тегам