J'ai trouvé, le hard way, qu'au moins boost::program_options
dépend de l'alignement des membres de la structure configurée par le compilateur.La bibliothèque de boost doit-elle dépendre des alignements des membres de la structure?
Si vous construisez boost en utilisant les paramètres par défaut et que vous le liez avec un projet en utilisant l'alignement de 4 octets (/Zp4
), il échouera à l'exécution (fait un test minimal avec program_options). Boost va générer une assertion indiquant une éventuelle mauvaise convention d'appel mais la vraie raison est l'alignement des membres de la structure.
Est-il possible d'empêcher cela? Si l'alignement rend le code incompatible, cela ne devrait-il pas être inclus dans la dénomination de la bibliothèque?
Vous savez, il y a * beaucoup * d'options de compilateur qui modifient l'ABI. Ils ne peuvent pas tous être nommés. Parfois, même les développeurs Boost doivent supposer que leurs utilisateurs sont compétents et savent comment lier à une bibliothèque – jalf
Compilez-vous les options du programme lib vous-même? Ou en utilisant un préconstruit? Si vous pouvez fournir le cas de test, nous aimerions, par exemple Vladimir P., le déboguer. Parce que tant que * tout * le code est compilé avec des options compatibles, les choses ne devraient pas casser. – GrafikRobot