HowTo shared-object?

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

HowTo shared-object?

Beitrag von _sivizius »

Was muss ich beachten, wenn ich eine shared-object Bibliothek mit purebasic unter linux (64-bit) erstellen möchte?
Ich dachte, es sei ein Bug, denke aber nun, dass es nur undokumentiert ist oder ich grad schlicht weg faile.

Code: Alles auswählen

lib = OpenLibrary(0, #pfad+"lib.so")
erzeugt nämlich einen segmentationfault/»ungültigen Speicherzugriff«, wenn jene .so von mir selbst programmiert wurde.
diese .so sieht folgendermaßen aus:

Code: Alles auswählen

;{ about
  ; a lib, just a lib. yes, of course, its a lib!
  ; writen by _sivizius, general of the Super Bots Army and
  ; king of all ponys of the whole world!
;}
;{ structures
  Prototype.i initLib(name.p-ascii)
  Prototype.i callErr(id.a)
;}
;{ vars
  Global load.initLib
  Global error.callErr
  Global offset.u
;}
;{ project
  Procedure __load__(self.u, *init, *error)
    load                                = *init
    error                               = *error
    offset                              = self
    load("example")
    ProcedureReturn 1337
  EndProcedure
  Procedure example(self.u, *stream)
     ;stuff
  EndProcedure
;}
Der Sinn der __load__() ist es, beim laden der Bibliothek dem Hauptprogramm zu sagen, welche Prozeduren besonders referenziert werden sollen.
Sonstige .so lassen sich problemlos laden, scheint also an meinem code zu liegen, irgendwas mit *pointern nicht beachtet?
mfg
_sivizius
Benutzeravatar
Bisonte
Beiträge: 2430
Registriert: 01.04.2007 20:18

Re: HowTo shared-object?

Beitrag von Bisonte »

Also laut der Hilfe sind DLL's und .so's gleich im Aufbau...

Und den hast du in deinem Beispiel überhaupt nicht so getroffen....
Kein ProcedureDLL oder sonstiges, heisst also, diese so/dll exportiert keine Funktionen nach außen,
was sie wiederum sinnlos macht ;)

Es ist auch ein Beispiel in den Examples hierzu vorhanden...
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: HowTo shared-object?

Beitrag von _sivizius »

ändert nichts
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: HowTo shared-object?

Beitrag von ts-soft »

Mit der 64-Bit Version erstellte *.so Dateien lassen sich nicht laden.
Mit der 32-Bit Version erstellte funktionieren, wie es sein sollte!

Bild
http://www.purebasic.fr/english/viewtop ... 69#p436069
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
_sivizius
Beiträge: 98
Registriert: 23.10.2013 15:21

Re: HowTo shared-object?

Beitrag von _sivizius »

...also doch ein bug wie ich vermutete...
bekommt man einen 32-bit compiler auf 64-bit zum laufen?
woran liegt das genau? gibts in absehbarer zeit nen patch für?
Antworten