Maison >développement back-end >C++ >Pourquoi mon code C ne parvient-il pas à se compiler avec l'en-tête `` après la mise à niveau vers Catalina ?

Pourquoi mon code C ne parvient-il pas à se compiler avec l'en-tête `` après la mise à niveau vers Catalina ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-15 10:15:02636parcourir

Why is my C   code failing to compile with the `` header after upgrading to Catalina?

Catalina C : Erreur d'en-tête : membre 'signbit' non défini

Introduction

La mise à niveau vers Catalina à partir de Mojave peut introduire des problèmes lors de la compilation de programmes qui s'appuient sur en-tête. Cela est dû à un changement dans la façon dont les bibliothèques système sont gérées dans Catalina.

Énoncé du problème

Après la mise à niveau, la tentative de compilation de code à l'aide de l'outil header entraîne des erreurs telles que :

error: no member named 'signbit' in the global namespace
error: no member named 'fpclassify' in the global namespace
error: no member named 'isfinite' in the global namespace

Cause

Catalina purge et protège le répertoire /usr/include, où se trouvent généralement les en-têtes C. Par conséquent, les systèmes de build peuvent ne pas parvenir à localiser les en-têtes nécessaires.

Solution

Pour résoudre ce problème, il est nécessaire de pointer le système de build vers les en-têtes corrects à l'aide de l'indicateur du compilateur -isysroot. . Voici les étapes à suivre :

  1. Vérifiez que Xcode est à jour.
  2. Déterminez le chemin du SDK système à l'aide de xcrun --show-sdk-path, et modifiez le système de build en conséquence :

    • CMake : set(CMAKE_OSX_SYSROOT /sdk/path) ou set(CMAKE_CXX_FLAGS "[...] -isysroot /sdk/path")
    • Autres compilateurs : Ajoutez -isysroot /sdk/path au compilateur flags

Conclusion

Suivre ces étapes devrait résoudre le problème et autoriser les programmes utilisant le en-tête pour compiler avec succès sous Catalina.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn