Должна ли библиотека повышения зависеть от выравнивания элементов структуры? - PullRequest
4 голосов
/ 26 апреля 2010

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

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

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

1 Ответ

8 голосов
/ 26 апреля 2010

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

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

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

...