Seite 1 von 1

HowTo shared-object?

Verfasst: 02.02.2014 19:36
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

Re: HowTo shared-object?

Verfasst: 02.02.2014 20:12
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...

Re: HowTo shared-object?

Verfasst: 02.02.2014 20:20
von _sivizius
ändert nichts

Re: HowTo shared-object?

Verfasst: 02.02.2014 20:43
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

Re: HowTo shared-object?

Verfasst: 02.02.2014 20:48
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?