Seite 1 von 2

Linux Shared Librarys erstellen (wie DLLs unter Windows)

Verfasst: 26.04.2008 21:12
von osta
Hab eben ein bisschen rumprobiert mit der Library() lib von PB und festgestellt, dass man die libs unter /usr/lib zB damit öffnen kann und auch deren Funktionen auslesen. (Ja ich weiss, ich hab keine ahnung von Linux, aber wenigstens versuch ich so es zu lernen)

Nun die Frage ob man diese Libs auch mit PB erstellen kann, so wie unter Windows DLLs. Unter Linux kann man ja nur zwischen Console und Linux als ExecutableType auswählen, allerdings kann man die Schlüsselwörter ProcedureDLL durchaus benutzen.
Hab probiert eine Date mit ProcedureDLLs zu kompilieren und dann als Library() zu laden, aber das hat nicht geklappt. Muss man sich an ein bestimmtes Format halten oder ist es mit PB nicht möglich Librarys unter Linux zu erstellen?

Nebenbei die Frage gibt es unter Linux auch eingebaute API funktionen, sowie unter Windows mit dem Unterstrich? Und wenn ja, wo gibt es einen Überblick, sowas wie den API-Guide für Windows. Mit den eingebauten PB Funktionen kommt man ja nicht überall hin (siehe zB meinen Thread um anderen Fenstern Tastenschläge zu simulieren)

Verfasst: 26.04.2008 21:20
von Vermilion
Das Linux Gegenstück zu DLLs sind *.so Bibliotheken. Kannst du auch erstellen, musst du nur da wo du das Output Format angibst auswählen (weiß ich gerade nicht aus dem Kopf).

Das mit der API ist dort etwas anders, es gibt keine zentrale. Du kannst von PureBasic aus aber gleich nativ (also die original Befehle mit Unterstrich) auf die APIs von SDL und GTK zugreifen.

Verfasst: 26.04.2008 21:20
von ts-soft
DLLs haben in Linux die Endung: .so und können mit der aktuellen PB-Linux
Version erstellt werden.

Unter Linux gibt es mehrere APIs, z.B. GTK, SDL usw. die auch mit einem
Unterstrich am ende genutzt werden können.

Infos zu den API-Funktionen findet man auf der jeweiligen Website zur Lib
oder kann man sich installieren. devhelp ist ein Programm zum Anzeigen
dieser Hilfen. Die Hilfen selber heissen dann: libgtkxxxxx.doc, wobei xxx
die jeweilige Version ist.

Wenn man also die *.dev für PB installiert, sollte man, falls vorhanden auch
die passenden *.doc mitinstallieren, sowie devhelp um diese anzusehen.

Verfasst: 27.04.2008 12:29
von NicTheQuick
Siehe ganz oben hier im Forum: Ressourcen zur Linux-Programmerung

Danke

Verfasst: 28.04.2008 11:11
von osta
danke für die Antwort. Hab jetzt die neuste Beta runtergeladen und da erscheint auch die Option für so shared libs....

Verfasst: 07.05.2008 11:26
von Lebostein
Was ich nicht verstehe ist, dass die Librarys, zum Beispiel die FMOD "libfmod-3.75.so" nur mit PB geöffnet werden, wenn sie in das Verzeichnis "/usr/lib/" kopiert wurden. In der Hilfe steht doch bei OpenLibrary() drin:

"Normalerweise, wenn Sie keinen Pfad als Teil des Dateinamens mit angeben, dann wird die Library im Verzeichnis Ihres Programms gesucht, und wenn sie sich nicht dort befindet, das Verzeichnis der Systembibliotheken durchsucht."

Kann mir jemand weiterhelfen?

Verfasst: 07.05.2008 15:07
von DarkDragon
Vermilion hat geschrieben:Das Linux Gegenstück zu DLLs sind *.so Bibliotheken. Kannst du auch erstellen, musst du nur da wo du das Output Format angibst auswählen (weiß ich gerade nicht aus dem Kopf).

Das mit der API ist dort etwas anders, es gibt keine zentrale. Du kannst von PureBasic aus aber gleich nativ (also die original Befehle mit Unterstrich) auf die APIs von SDL und GTK zugreifen.
Doch es gibt eine zentrale Linux API, allerdings kann die von den Distributionen abweichen und hat rein garnichts mit GUI zu tun so wie die Windows API:

http://www.purebasic.fr/german/viewtopic.php?t=7151

Verfasst: 07.05.2008 15:29
von ts-soft
Lebostein hat geschrieben:Was ich nicht verstehe ist, dass die Librarys, zum Beispiel die FMOD "libfmod-3.75.so" nur mit PB geöffnet werden, wenn sie in das Verzeichnis "/usr/lib/" kopiert wurden. In der Hilfe steht doch bei OpenLibrary() drin:

"Normalerweise, wenn Sie keinen Pfad als Teil des Dateinamens mit angeben, dann wird die Library im Verzeichnis Ihres Programms gesucht, und wenn sie sich nicht dort befindet, das Verzeichnis der Systembibliotheken durchsucht."

Kann mir jemand weiterhelfen?
Ich würde "./" vor dem Namen setzen, das wäre Linux-Üblich

Verfasst: 07.05.2008 15:37
von hardfalcon
DD: Falls du die Standardbefehle meinst, wie man sie bei praktisch jeder Linux-Distri findet: Nein, das ist keine API. Das ist eher (allerdings bin ich mir da absolut nicht sicher) POSIX... :wink:

Verfasst: 07.05.2008 16:08
von DarkDragon
hardfalcon hat geschrieben:DD: Falls du die Standardbefehle meinst, wie man sie bei praktisch jeder Linux-Distri findet: Nein, das ist keine API. Das ist eher (allerdings bin ich mir da absolut nicht sicher) POSIX... :wink:
http://de.wikipedia.org/wiki/Portable_O ... _Interface
Das Portable Operating System Interface (POSIX [ˈpɒsɪks]) ist ein gemeinsam von der IEEE und der Open Group für Unix entwickeltes standardisiertes Application Programming Interface, [...]