logische Struktur anlegen

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
BlackJack

@hypnoticum: "Unschön" heisst, dass man das nicht macht, weil das früher oder später Probleme bereitet.

Der Quelltext muss nicht an einem Stück vorhanden sein. Das `source`-Argument nimmt doch eine Liste entgegen und nicht nur einen Dateinamen.

Nach den üblichen C-Konventionen sähe dass so aus:

Code: Alles auswählen

C/
    Block.c
    cExtenFun1.h
    cExtenFun1.c
    cExtenFun2.h
    cExtenFun2.c
    common.h
    common.c
In `common.*` wären dann die gemeinsam genutzten Funktionen. Wenn man das nicht so auslagert, bekäme man eine zirkuläre Abhängigkeit bei den ``#include``\s.
deets

@hypnoticum

Der Grund ist der, dass jedes C-File eine 'compilation unit' ist. Und das zusammenfassen via linken geschieht. Wenn du das anders machst, musst du aufpassen, dass der Compilationsprozess niemals dasselbe source-file zweimal einbindet- sonst gibt's doppelte Symbole.

Darum BlackJack's sehr richtiger Ratschlag.
hypnoticum
User
Beiträge: 132
Registriert: Dienstag 15. März 2011, 15:43

Ist vielleicht unüblich, aber funktioniert erstmal.
Ich habe auch nicht den Überblick was beim Compilieren in welcher Reihenfolge abläuft, wie oft jedes File abgesucht wird, Symbole ersetzt werden ...
Sucht der Linker automatisch nach einem gleichnamigen Objekt-File wenn ich Funktionen einer inkludierten Header Datei verwende? Und wenn der zugehörige Quellcode noch gar nicht komnpiliert wurde?
was mich wundert ist, das ich keinen Fehler trotz mehrfach definiertem Label bekomme

Abschließend wärs nett wenn einer wüsste warum das so ist:

>>Wenn ich etwas an der obigen Datei ändere zB anstelle von "Gerät" "Device" schreibe und nach der Erzeugung des Moduls diese Änderung wieder rückgängig mache, werden von nun an zwei Ordner in ".../Pythonxy/Lib/site-packages" angelegt. Die Erzeugung der Module wird also immer wieder unabhängig von dem Inhalt der Datei vorgenommen ... ?
BlackJack

@hypnoticum: Die `distutils` "wissen" wie sie aus den angegebenen Dateien jeweils eine Object-Datei (*.o) machen und rufen am Ende den Linker mit allen Object-Dateien auf. Dann der Linker die Symbole alle auflösen, weil er die exportierten Symbole von allen Übersetzungseinheiten kennt.

Man kann in C ein und die selbe Sache beliebig oft deklarieren, solange die Deklaration immer gleich ist.
Antworten