Home  >  Article  >  Backend Development  >  Why is my C code failing to compile with the `` header after upgrading to Catalina?

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

Patricia Arquette
Patricia ArquetteOriginal
2024-11-15 10:15:02562browse

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

Catalina C : Header Error: Undefined 'signbit' Member

Introduction

Upgrading to Catalina from Mojave can introduce issues when compiling programs that rely on the header. This is due to a change in how the system libraries are handled in Catalina.

Problem Statement

After the upgrade, attempting to compile code using the header results in errors such as:

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 purges and protects the /usr/include directory, which is where the C headers are typically found. As a result, build systems may fail to locate the necessary headers.

Solution

To resolve this issue, it is necessary to point the build system to the correct headers using the -isysroot compiler flag. Here are the steps to do so:

  1. Verify that Xcode is up to date.
  2. Determine the system SDK path using xcrun --show-sdk-path, and modify the build system accordingly:

    • CMake: set(CMAKE_OSX_SYSROOT /sdk/path) or set(CMAKE_CXX_FLAGS "[...] -isysroot /sdk/path")
    • Other compilers: Add -isysroot /sdk/path to the compiler flags

Conclusion

Following these steps should resolve the issue and allow programs using the header to compile successfully under Catalina.

The above is the detailed content of Why is my C code failing to compile with the `` header after upgrading to Catalina?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn