From Fedora Project Wiki

m (Add Q&A for libgcc.)
Line 19: Line 19:
 
=== Question and Answer ===
 
=== Question and Answer ===
  
Q: Do I need to include a <code>Requires: libgcc</code>
+
Q: Do I need a <code>Requires: glibc</code> to ensure I have the C runtime installed for my application?
  
A: No. The core runtimes, particularly <code>glibc</code> will provide you with everything you need to run using a C runtime, and that includes <code>libcc</code>
+
A: No. RPM will automatically determine what ELF libraries you need based on the binaries in your package. This is sufficient to cause glibc to be installed.
 +
 
 +
Q: Do I need to include a <code>Requires: libgcc</code>?
 +
 
 +
A: If you are using an API from <code>libgcc</code> directly, then yes, you must have a <code>Requires: libgcc</code>. In general though <code>glibc</code> requires <code>libgcc</code>, so it is always installed.
  
 
[[Category:Packaging guidelines]]
 
[[Category:Packaging guidelines]]

Revision as of 01:24, 2 October 2015

This page contains best practices for packages that make use of or depend on C or C++ in Fedora, from development, debugging, and maintenance to packaging.

Packaging C and C++ applications

There are two basic categories of C and C++ packages: applications and libraries. Some of these guidelines will also apply to packages that use cpp to process C or C++ headers.

BuildRequires and Requires

If your application is a C or C++ application you must list a BuildRequires against gcc, gcc-c++ or clang. Those packages will include everything that is required to build a standards conforming C or C++ application.

If your library includes standard C or C++ headers, you must list BuildRequires against gcc, gcc-c++, or clang to install the needed standards conforming headers.

If at runtime you use cpp to process C or C++ language headers then you have no choice but to use Requires for gcc, gcc-c++, or clang to install the required headers for a standard conforming C or C++ application. In the future this might change if a set of standard C or C++ language headers are provided by a special-purpose provides e.g. c-headers or c++-headers.

You need not include a BuildRequires or Requires on glibc-headers, or any other core C or C++ implementation package unless you have a specific and special need e.g. static compilation requires the .*-static library packages. The default use case of a dynamically compiled C or C++ application is taken care of by the gcc, gcc-c++, and clang packages.

Please refer to Packaging:Guidelines Compiler for the list of supported compilers for C and C++ compilers.

Question and Answer

Q: Do I need a Requires: glibc to ensure I have the C runtime installed for my application?

A: No. RPM will automatically determine what ELF libraries you need based on the binaries in your package. This is sufficient to cause glibc to be installed.

Q: Do I need to include a Requires: libgcc?

A: If you are using an API from libgcc directly, then yes, you must have a Requires: libgcc. In general though glibc requires libgcc, so it is always installed.