Linux Shared Librarys erstellen (wie DLLs unter Windows)

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
osta
Beiträge: 87
Registriert: 08.09.2004 11:48
Wohnort: Morsbach (Am Arsch der Welt)
Kontaktdaten:

Linux Shared Librarys erstellen (wie DLLs unter Windows)

Beitrag 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)
Ich hänge zu oft und zu lange vor dem PC! Ich muss dringend was an meinem Lebenswandel verändern!.......
Nur heute geht's grad nicht.
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von NicTheQuick »

Siehe ganz oben hier im Forum: Ressourcen zur Linux-Programmerung
Bild
osta
Beiträge: 87
Registriert: 08.09.2004 11:48
Wohnort: Morsbach (Am Arsch der Welt)
Kontaktdaten:

Danke

Beitrag von osta »

danke für die Antwort. Hab jetzt die neuste Beta runtergeladen und da erscheint auch die Option für so shared libs....
Ich hänge zu oft und zu lange vor dem PC! Ich muss dringend was an meinem Lebenswandel verändern!.......
Nur heute geht's grad nicht.
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag 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?
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46
Wohnort: Luxemburg
Kontaktdaten:

Beitrag 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:
„Warum siehst du den Splitter im Auge deines Bruders, aber den dicken fetten schwarzen Zensurbalken vor deinem Auge bemerkst du nicht?“
DarkDragon
Beiträge: 6267
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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, [...]
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten