Erstellen von Programmbibliotheken in Windows und LINUX [C ++]

8

Ich plane Bibliotheken in meinem C ++ Programm zu verwenden. Die Entwicklung läuft unter Linux, aber die Anwendung ist so konzipiert, dass sie sowohl unter Linux als auch unter Windows kompiliert werden kann. Ich verstehe direkte Entsprechung für gemeinsame Bibliotheken (.so) in Windows ist DLL, richtig?

In Linux mit g ++ kann ich eine gemeinsam genutzte Bibliothek mit -fPIC und -shared flags erstellen. AFAIK, für eine gemeinsam genutzte Bibliothek ist keine weitere Codeänderung erforderlich. In einer Windows DLL ist das anders. Dort sollte ich die Funktionen angeben, die mit dllexport exportiert werden sollen , Recht?

Meine Frage ist, wie kann ich diese Situation bewältigen? Ich meine dllexport ist in Linux ungültig und der Compiler wird einen Fehler geben. Aber es ist in Windows erforderlich. Also, wie schreibe ich eine Funktion, die auf beiden Plattformen ohne Code-Änderung kompilieren wird?

Compiler verwendet

  • g ++ - LINUX
  • VC ++ - Windows

Jede Hilfe wäre großartig!

    
Navaneeth K N 09.06.2009, 02:57
quelle

4 Antworten

9

Wir geben __declspec(dllexport) für die Klasse an:

%Vor%

Sie können dann nach Plattform suchen und nur das Makro in Windows definieren. Zum Beispiel:

%Vor%

Wir bauen meistens statische Bibliotheken, damit es mehr Möglichkeiten für dynamische Bibliotheken gibt, aber das Konzept ist das gleiche - benutze einen Präprozessor, um die Zeichenfolge zu definieren, die du in den Windows-Code einfügen musst.

    
stefanB 09.06.2009, 03:02
quelle
5

Eine andere Alternative ist die Verwendung einer .def-Datei für Ihr Windows-Projekt. Diese Datei gibt die DLL-Exporte an, sodass Sie Ihre Codebasis nicht durcheinander bringen müssen. (Aber Makros sind definitiv der Weg zu gehen, wenn Sie die zusätzliche Datei vermeiden wollen.)

    
Peter Ruderman 09.06.2009 03:04
quelle
2

Sie können #ifdef preprocessor-Anweisung für das bedingte Kompilieren verwenden. Zum Beispiel:

%Vor%     
Alan Haggai Alavi 09.06.2009 03:02
quelle
1

Eine andere Möglichkeit, die ich jetzt nutze, ist MinGW unter Windows. Auf diese Weise können Sie gcc unter Windows verwenden, und Sie müssen sich nicht um den Declspec-Nonsense kümmern.

    
Mark Beckwith 09.06.2009 04:27
quelle