[Linux] Deklarieren von Arrays in DLL´s

Für allgemeine Fragen zur Programmierung mit PureBasic.
Justin
Beiträge: 167
Registriert: 09.09.2008 16:46

[Linux] Deklarieren von Arrays in DLL´s

Beitrag von Justin »

Hallo zusammen,

ich möchte eine DLL erstellen die unter Linux verwendert wird. In der PB- Hilfe steht:
Die Deklaration von Arrays, LinkedLists bzw. Maps mittels Dim, NewList bzw. NewMap muss stets innerhalb der Prozedur AttachProcess erfolgen.
Die AttachProcess- Procedure ist doch aber eine Windows- spezifische Funktion. Wo werden denn Arrays, LinkedLists und Maps in einer DLL für Linux deklariert?
PB 5.11 x64 / Kubuntu 12.10 x64 | Windows 7 x64
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Re: [Linux] Deklarieren von Arrays in DLL´s

Beitrag von Bisonte »

äh dll und Linux ? Ich war der Meinung das war Windows only....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
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

Re: [Linux] Deklarieren von Arrays in DLL´s

Beitrag von ts-soft »

Bisonte hat geschrieben:äh dll und Linux ? Ich war der Meinung das war Windows only....
Die Dateiextension "*.dll" ist windows only. Dynamische Libraries haben unter Linux im allg. die Endung "*.so"
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
Justin
Beiträge: 167
Registriert: 09.09.2008 16:46

Re: [Linux] Deklarieren von Arrays in DLL´s

Beitrag von Justin »

ömm, aber der Compiler erstellt doch eine *.so, oder? Und wie ist das mit der Deklaration von Arrays usw?

Gruß
Justin
PB 5.11 x64 / Kubuntu 12.10 x64 | Windows 7 x64
Justin
Beiträge: 167
Registriert: 09.09.2008 16:46

Re: [Linux] Deklarieren von Arrays in DLL´s

Beitrag von Justin »

da niemand etwas weiss, muss ich davon ausgehen, dass ich mit PB keine DLL´s für Linux erstellen kann?

Gruß
Justin
PB 5.11 x64 / Kubuntu 12.10 x64 | Windows 7 x64
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

Re: [Linux] Deklarieren von Arrays in DLL´s

Beitrag von ts-soft »

Der Hinweis zur Deklaration von Arrays steht im Abschnitt der reinen Windows-Funktionen, bezieht sich also nicht
auf Linux, dem zu folge sollte die Deklaration ganz normal erfolgen.

Hab das aber nicht probiert, da solltest Du wohl selber machen.
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
Justin
Beiträge: 167
Registriert: 09.09.2008 16:46

Re: [Linux] Deklarieren von Arrays in DLL´s

Beitrag von Justin »

ja, hab grad nochmal nachgelesen - unter Linex wird eine 'so' erstellt. Ich hoffe mal das funzt auch.
Kurz umrissen, bin ich gerade am Anfang eines Projekt, dass Modular aufgebaut ist und das möchte ic auch unter Linux umsetzen...

Gruß
Justin
PB 5.11 x64 / Kubuntu 12.10 x64 | Windows 7 x64
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Re: [Linux] Deklarieren von Arrays in DLL´s

Beitrag von Blackskyliner »

Definitiv funktioniert das. Hatte damals ein Modulares System entwickelt http://forums.purebasic.com/german/view ... 11&t=19260

Dies funktionierte unter Ubuntu, wie auch unter Windows ganz gut. (Sofern man das Eventsystem bei Linux ersetzt hat, daher hatte ich dann auch angefangen mein eigenes zu Implementieren um neben easyVENT auch eine Linux Variante zu haben... Leider bin ich bei beiden Projekten nicht mehr dran, weil keine Zeit wegen Studium und Arbeit :-\)

Leider ist auch der Host down auf dem das ganze lag, aber wenn Interesse besteht könnte ich das in meinen mehreren GB Projekt-Datenmüll rausfiltern und nochmal hochstellen. (Nicht zu vergessen dass es hoffnungslos veraltet ist, da auf 4.3 entwickelt wurde...

Kurzum, es funktioniert und sogar 'better than expected'. Eine .so ist eine Dynamic Linked Library unter Linux, also nichts anderes was die .dll unter Windows ist. Mit dem unterschied, dass man .so Dateien auch dazu nutzen kann (über LD_PRELOAD) um Funktionen eines Programmes gar komplett zu ersetzen (Sandbox ähnliches Prinzip, da die Anwendung nicht weiß dass sie modifiziert wird). Dies eröffnet interessante Möglichkeiten und sollte für sicherheitstechnische Gründe nie vergessen werden, wie ich finde da man so ziemlich jede Sicherheitsmaßnahme gut umgehen kann, die ein Programm einbaut indem man einfach zugrunde liegende Funktionen kompromittiert, etc. pp.

Nochmal um auf das Attach zurück zu kommen, hab grade kein PB installiert und da du andeutest dass es Windows-Only ist, diese Funktion, würde ich die empfehlen deine Module über ein Interface mit deiner Anwendung zu verklöppeln.

1. Ist das eine gute Art überhaupt Modulbasierte Anwendungne zu entwickeln.
2. Können andere Programmierer bzw. gar andere Programmiersprachen für Module genutzt werden, solange sie dieses Interface implementieren.

Jetzt kommen wir auf das eigentliche Problem, der Definition von Arrays, etc - mein Gott schweife ich wiedermal ab, hoffe es war wenigstens interessant - ich glaube der Meinung zu sein, dass es möglich war diese Dinge im globalen Space definieren zu können. ganz sicher bin ich mir jedoch nicht da aktives arbeiten mit PB, vorallem unter Linux sehr lange zurück liegt... Wie ts-soft schon sagte einfach mal ausprobieren.

Ansonsten kann ich noch zeigen, wie man unter Linux zumidnest das Attachen in C realisieren würde.

Code: Alles auswählen

void __attribute__ ((constructor)) _construct(void);
void __attribute__ ((destructor)) _destruct(void);

void _construct(void)
{
    // Initialisieren
}

void _destruct(void)
{
    // Aufräumen
}
Wobei die Funktionsnamen frei wählbar sind, bzw. auch direkt definierbar wären ohne über eine extra funktion zu gehen. Dann würde statt dem "Funktionspointer" einfach der auszuführende Block da stehen.

_construct würde beim laden der 'so' aufgerufen werden (dlopen())
_destruct würde beim entladen gerufen werden (dlclose())

Hoffe ich konnte damit etwas Licht in die Thematik bringen :)

Weiterführende Informationen findet man unter anderem hier:
http://www.symantec.com/connect/article ... s-part-one
http://www.dwheeler.com/program-library ... ary-HOWTO/

Grüße,
Blackskyliner
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
Antworten