2016-03-29 4 views
1

SDL verfügt über eine WinMain-Implementierung und deklariert die SDL_main-Funktion. Der Benutzer kann den Hauptteil dieser Funktion und den Einstiegspunkt in SDL-Bibliotheksaufrufen definieren, die funktionieren.So erstellen Sie eine Bibliothek in C++, die den Haupteintrittspunkt enthält, z. B. SDL

Ich möchte eine Bibliothek mit der gleichen Implementierung implementieren. Also wie baue ich eine Bibliothek in C++, die den Einstiegspunkt enthält und dem Benutzer einen Prototyp einer Funktion zu geben, nachdem definiert und wie SDL aufgerufen wird.

Lib.hpp:

#define Main lib_main 
extern int lib_main(); 

Lib.cpp:

konnte Eine mögliche Implementierung sein

#include "lib.hpp" 

int main(){ 
    // the lib code runs here 
    lib_main(); 
} 

nach dem Bauprozess der diese Bibliothek ich wie so verwenden können:

main.cpp

#include "lib.hpp" 
int Main(){ 
    // The user code 
} 

ich Lib.cpp mit diesem Befehl nicht kompilieren können:

g ++ -shared lib.cpp -o lib.dll -Wl, - out-implib, libLib.a

es bekommen mir eine undefinierte Referenz für die lib_main().

Ich benutze Windows.

+0

'int Haupt() {...}' wird erweitert als 'int lib_main();() {...}' ... möchte vielleicht Ihre '# define' in Lib.hpp aktualisieren – AJNeufeld

+0

Aktualisiert. Danke –

+0

Es ist möglich, mit Build-Flags [den Einstiegspunkt eines Programms zu ändern] (http: // stackoverflow.com/questions/7494244/how-to-ändern-entry-point-of-c-programm-mit-gcc) aber anders als das Sie Ihre eigene Frage beantwortet haben. – Matt

Antwort

3

Sie haben Ihre Plattform nicht angegeben, aber wenn Sie GCC verwenden, funktioniert Ihr Code.

eine statische Bibliothek Kompilieren etwa so:

g++ -c -o Lib.o Lib.cpp 
ar rcs libLib.a Lib.o 

das Hauptprogramm, wie so Kompilieren:

g++ -L. -lLib -o main main.cpp 

OR

eine gemeinsam benutzte Bibliothek Kompilieren für * Nix wie folgt:

g++ -shared -o libLib.so Lib.cpp 

Kompilieren das Hauptprogramm wie folgt:

g++ -L. -lLib -o main main.cpp 

ODER

eine gemeinsame Bibliothek zusammenstellen und eine Importbibliothek für Windows wie folgt:

g++ -shared -o libLib.dll --Wl,--out-implib,libLib_dll.a Lib.cpp 

wie so das Hauptprogramm kompilieren, Verknüpfung mit der Importbibliothek und Hinzufügen des aktuellen Verzeichnisses zum Runtime-Suchpfad:

g++ -L. -lLib_dll -Wl,-rpath,. -o main main.cpp 
+0

Danke für die Antwort. Ich habe es versucht und es funktioniert. Aber hier ist die Sache. Wenn ich diese Befehle zum Erstellen der freigegebenen und statischen Bibliotheken ausführen: g ++ -c Lib.cpp g ++ -shared -o Lib.dll Lib.o -Wl, - out-implib, libLib.a g ++ main.cpp -o Haupt- -L. -lLib Es kompiliert nur die .a und das eigentliche Hauptprogramm, aber nicht die .dll. Das Programm kann nicht ausgeführt werden, da keine DLL-Datei vorhanden ist. Wussten Sie den Unterschied? –

+0

Offenbar versuchen Sie, sowohl statische als auch gemeinsam genutzte Bibliotheken zu erstellen. Stellen Sie sicher, dass Sie die statische Bibliothek nicht mit der Importbibliothek für die gemeinsam genutzte Bibliothek verwechseln. Überprüfen Sie meine aktualisierte Antwort. – Chaos

Verwandte Themen