Ich habe eine einfache Helferbibliothek für ein kleines Spiel, das ich mache, gemacht. In einer solchen Bibliothek habe ich einige Kernfunktionen, die so schnell wie möglich funktionieren müssen, da sie tausende Male pro Spielfeld aufgerufen werden.Symbol duplizieren, wenn Header-Bibliothek mehr als einmal enthalten ist
Wenn ich sie „inline“ erklären und teilen ihre Erklärung (library.h
) aus ihrer Umsetzung (library.c
) und sie in der Spieldatei (game.c
), ich denke, sie sind nicht inlined/optimiert sie direkt in game.c
seit erklärt und das Spiel mit gcc -O3
kompilieren gibt mir einen Leistungsschub von mehr als 60 mal.
Um dieses Problem zu lösen, habe ich beschlossen, meine Bibliothek eine Header-Only-Bibliothek zu machen. Ich habe alle meine Framework-Konstanten, Variablen und Funktionen in library.h
. Inklusive es in game.c
gibt mir immer noch die maximale Leistung.
Nun, das Problem ist, dass, wenn ich library.h
in mehr als eine Datei enthalten (zB game1.c
und game2.c
) ich eine lange Liste von duplicate symbol
Fehlern erhalten, wenn das Spiel zu kompilieren. Die Bibliothek hat #pragma once
, aber immer noch tritt das Problem auf.
Wie tatsächlich Header-only-Bibliotheken schreiben oder sicherstellen, dass eine Inline-Funktion aus einer externen Bibliothek tatsächlich optimiert ist?
Dank
Definieren * Sie * Variablen oder Funktionen in Ihrer Header-Datei? –
Sie wollen nur die Variablen im Header deklarieren und haben eine separate '.c' Datei für Definitionen – qwn
Sie wollen die Funktionen' static' deklarieren. – alk