__declspec(dllexport) Portierung nach Linux
-
Hallo,
ich bin gerade dabei eine Bibliothek von Windows nach Linux zu übersetzen. Dabei bin ich auf Funktionen gestoßen die in etwa so aussehen:
__declspec(dllexport)bool Function(){...}.
Ich weiß nun, dass eine mit __declspec(dllexport) deklarierte Funktion in die dll exportiert wird. Nun suche ich nach einem ähnlichem Befehl für Linux. Nachdem ich etwas gegoogled hab, weiß ich auch, dass das Linux dll-Äquivalent die Shared Objects sind und ich mit bestimmten Einstellungen kompilieren muss um ein shared Object zu erstellen. Aber irgendwie ist mir noch nicht klar geworden wie ich die oben beschriebenen Funktionen ändern muss, damit diese in das shared Object übernommen wird und ich das ganze überhaupt erst unter Linux kompilieren kann.
Ich wäre sehr dankbar für jede Hilfe.Viele Grüße,
esinef
-
das "__declspec(dllexport)" wird unter windows durch gar nichts ersetzt
.
Das heißt du kannst die Funktion ganz normal deklarieren
z.B. bool Function();
-
Erstmal Danke für deine schnelle
Antwort. Das heißt dann das shared Object wird dann nur durch den entsprechenden Compilerbefehl erstellt und bei Windows muss ich dem Compiler aber extra mittels __declspec(dllexport) sagen, dass die Funktion in die dll soll?
-
nicht direkt dieses Kommando sagt dem Compiler das die Funktion exportiert werden soll. Alles andere stimmt.
-
das heißt, in einem shared object werden grundsätzlich einfach ALLE Funtkionen exportiert?
-
ja
-
DrakoXP schrieb:
das heißt, in einem shared object werden grundsätzlich einfach ALLE Funtkionen exportiert?
Du kannst Funktionen natürlich wie gewohnt mit static oder anonymen namespaces verstecken. Wenn dir das nicht reicht, dann gibt es noch das visibility attribute.
-
danke
-
siehe "Step-by-step guide" bei http://gcc.gnu.org/wiki/Visibility
Mit anderen Worten, bei jeder Klasse im Header das _API-Define verwenden,
und bei lokalen Klassen das _LOCAL-Define verwenden und dann diese Defines je nach verwendetem Compiler und Export-/Import-Situation definieren --> maximale Flexibilität.