Hallo! "Gehonntoo" klingt nach einem Tippfehler oder einer bestimmten Dialekt/Aussprache. Ich nehme mal an, Sie meinen "gehört zu" oder "gehört dazu".

Wenn Sie fragen, wie man GCC (GNU Compiler Collection) und Python zusammen verwendet, dann ist das eine sehr gute und häufige Frage. Die kurze Antwort lautet:
Python wird mit GCC nicht direkt "kompiliert", aber Python kann Programme, die mit GCC kompiliert wurden (z.B. in C oder C++), aufrufen und deren Funktionalität nutzen.
Hier sind die gängigsten Szenarien, wie die beiden zusammenarbeiten:
Szenario 1: Python ruft C/C++-Code auf (Das häufigste Szenario)
Manchmal ist ein Teil Ihres Python-Programms performancekritisch. Anstatt diesen Teil in Python zu schreiben (was langsamer sein kann), schreiben Sie ihn in C oder C++, kompilieren ihn mit GCC zu einer dynamischen Bibliothek (.so auf Linux/macOS oder .pyd auf Windows) und importieren diese Bibliothek dann in Python.

Schritt-für-Schritt-Anleitung (Beispiel mit C)
C-Code schreiben (meine_funktion.c)
Schreiben Sie Ihre C-Funktion. Wichtig ist, dass Sie die Header-Datei Python.h inkludieren, um mit der C-API von Python kommunizieren zu können.
// meine_funktion.c
#include <Python.h>
// Unsere C-Funktion, die zwei Zahlen addiert
static PyObject* addiere_zahlen(PyObject* self, PyObject* args) {
double a, b;
// Die Funktion liest zwei Argumente aus dem Python-Aufruf
if (!PyArg_ParseTuple(args, "dd", &a, &b)) {
return NULL; // Fehler, wenn die Argumente falsch sind
}
// Das Ergebnis wird als Python-Float-Objekt zurückgegeben
return PyFloat_FromDouble(a + b);
}
// Dies ist die "Definition" unserer Moduls in Python
static PyMethodDef MeineMethoden[] = {
{"addiere", addiere_zahlen, METH_VARARGS, "Addiert zwei Zahlen."},
{NULL, NULL, 0, NULL} // Sentinel, das das Ende der Methodenliste markiert
};
static struct PyModuleDef meinmodul = {
PyModuleDef_HEAD_INIT,
"mein_c_modul", // Name des Moduls in Python
NULL,
-1,
MeineMethoden
};
// Diese Funktion wird von Python aufgerufen, um das Modul zu initialisieren
PyMODINIT_FUNC PyInit_mein_c_modul(void) {
return PyModule_Create(&meinmodul);
}
Mit GCC kompilieren
Sie müssen GCC anweisen, eine C-Datei in eine Python-erweiterbare Bibliothek zu kompilieren. Die genauen Flags hängen von Ihrer Python-Version und Ihrem Betriebssystem ab.

Finden Sie zuerst die Include- und Bibliothekspfade für Ihr Python:
# Für Python 3.x (ersetzen Sie 3.10 durch Ihre Version) python3-config --cflags python3-config --ldflags
Jetzt kompilieren Sie:
gcc -shared -fPIC $(python3-config --cflags) -o mein_c_modul.so $(python3-config --ldflags) meine_funktion.c
-shared: Erzeugt eine dynamische Bibliothek (Shared Object).-fPIC: "Position Independent Code", erforderlich für Shared Libraries.$(python3-config --cflags): Fügt die Include-Pfade und andere Compiler-Flags für Python hinzu.$(python3-config --ldflags): Fügt die Bibliothekspfade und Linker-Flags für Python hinzu.-o mein_c_modul.so: Gibt der Ausgabedatei einen Namen.meine_funktion.c: Ihre C-Quelldatei.
In Python importieren und verwenden
Jetzt können Sie die kompilierte .so-Datei wie ein normales Python-Modul importieren.
# mein_skript.py
import mein_c_modul
# Die Funktion aus dem C-Code aufrufen
ergebnis = mein_c_modul.addiere(5.5, 10.2)
print(f"Ergebnis aus C: {ergebnis}")
Ausgabe:
Ergebnis aus C: 15.7
Szenario 2: Python als Build-Tool für C/C++-Projekte
In vielen C/C++-Projekten wird CMake als Build-System verwendet. CMake ist plattformunabhängig und kann die Konfiguration automatisch für verschiedene Compiler (wie GCC) und auch für Python durchführen.
Ein CMake-Setup könnte so aussehen:
-
CMakeLists.txt:cmake_minimum_required(VERSION 3.10) project(MeinCProjekt) # Finde Python und seine Bibliotheken find_package(Python COMPONENTS Interpreter Development REQUIRED) # Führe eine Python-Skript aus, um etwas vorzubereiten add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/daten.txt COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/generate_data.py DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/generate_data.py ) # Erstelle eine ausführbare Datei aus einem C++-Source add_executable(mein_programm main.cpp)
In diesem Fall nutzt Python die "Build-Logik" des Projekts, während GCC (über CMake) den eigentlichen Code kompiliert.
Szenario 3: Cython – Eine Brücke zwischen Python und C
Cython ist eine Erweiterung für Python, die es ermöglicht, Code in einer Sprache zu schreiben, die sehr an Python erinnert, aber auch statische C-Typen verwenden kann. Dieser Cython-Code wird dann von Cython in C-Code umgewandelt, den man anschließend mit GCC kompiliert, um eine sehr schnelle Python-Erweiterung zu erstellen.
.pyx-Datei schreiben: Eine Mischung aus Python und C-Typen.setup.py-Datei erstellen: Ein Skript, das den Kompilierungsprozess steuert.- Befehl ausführen:
python setup.py build_ext --inplace- Cython übersetzt die
.pyx-Datei in eine.c-Datei. setup.pyruft dann GCC auf, um diese.c-Datei in eine.so/.pyd-Datei zu kompilieren.
- Cython übersetzt die
Dies ist eine sehr effiziente Methode, um Python-Code zu beschleunigen.
Zusammenfassung
| Szenario | Beschreibung | Wie GCC und Python zusammenarbeiten |
|---|---|---|
| C-Erweiterung | Python ruft eine in C/C++ geschriebene Funktion auf. | Python ruft GCC auf, um C-Code in eine Bibliothek zu kompilieren, die es dann importieren kann. |
| Build-System | Python wird in einem C/C++-Build-Prozess (z.B. mit CMake) verwendet. | Python wird als Skript-Sprache im Build-Prozess verwendet, während GCC der eigentliche Compiler ist. |
| Cython | Python-Code wird mit Cython in C übersetzt, um ihn zu beschleunigen. | Cython generiert C-Code, der dann mit GCC kompiliert wird, um eine schnelle Python-Erweiterung zu erstellen. |
Die häufigste und wichtigste Interaktion ist Szenario 1: die Erstellung von C-Erweiterungen für Python mit GCC.
