DLL, Shared Objects... Platformunabhängiger Code

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
tobb
Beiträge: 1032
Registriert: 27.01.2006 17:48:13

DLL, Shared Objects... Platformunabhängiger Code

Beitrag von tobb » 11.07.2007 17:08:45

Ist folgender Code geeignet um unter Windows DLLs (das fuktioniert) und unter Linux shared objects zu erstellen:

Code: Alles auswählen

#ifdef _MSC_VER
    #define EXPORT __declspec(dllexport)
#else
    #define EXPORT
#endif

int EXPORT foo()
{
    return 0;
}
Braucht man unter Linux nicht so etwas wie __declspec(dllexport) für Windows zu definieren?

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: DLL, Shared Objects... Platformunabhängiger Code

Beitrag von gms » 11.07.2007 20:32:57

tobb hat geschrieben:Ist folgender Code geeignet um unter Windows DLLs (das fuktioniert) und unter Linux shared objects zu erstellen:
ja
tobb hat geschrieben: Braucht man unter Linux nicht so etwas wie __declspec(dllexport) für Windows zu definieren?
nein, normalerweise wird unter Linux/Unix alles exportiert, wenn dieses Verhalten absolut nicht gewünscht wird, müßte dem Linker eine Liste der zu exportierenden Symbole übergeben werden. Zumeist lohnt dieser Aufwand jedoch nicht.

Gruß
gms

tobb
Beiträge: 1032
Registriert: 27.01.2006 17:48:13

Beitrag von tobb » 11.07.2007 21:31:09

Gibt es standatisierte Makros, an denen man erkennt welche sBetriebssystem vorhanden ist?
Also sowas zum Beispiel

Code: Alles auswählen

#ifdef __WINDOWS
...

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 11.07.2007 22:28:52

Hier sind die mir bekannten:

Code: Alles auswählen

gcc 3.4 unter linux: __linux und __unix
gcc 3.3 unter aix: _AIX aber kein __unix
gcc 4.1 unter aix: _AIX aber kein __unix
gcc 3.4 unter sun: __sun und __unix
zOS: __MVS__ und __unix
WIe man sieht, wird hier Linux eigenartiger Weise als Unix geführt, AIX aber nicht. Es gibt auch keine einheitliche Regelung, ob Großbuchstaben oder Kleinbuchstaben verwendet werden sollten.

Gruß
gms

Antworten