Page 1 sur 1

[Résolu] LINUX - problème avec les librairies PB

Publié : ven. 10/avr./2009 12:52
par f1roe
Bonjour a tous,

Il semble que les librairies Linux (.so) construites avec purebasic posent des erreurs.
A l'exécution dans l'éditeur PB il n'y a aucun problème mais dès que les codes sont compilés un message "Erreur de segmentation" est adressé. La commande lslibrary retourne 0.
En revanche, l'utilisation de librairies non PB sous linux ne posent aucun problème.

code de la librairie nombreSO.so:

Code : Tout sélectionner

ProcedureDLL.b addition(*nombre1)
*nombre1 = 5
    ProcedureReturn *nombre1
EndProcedure
Code du programme :

Code : Tout sélectionner

  Enumeration
    #DLL
  EndEnumeration
  nombre.b=1
  *nombre = @nombre

resultat =OpenLibrary(#DLL,"nombreSO.so")
   Prototype.b addition (*nombre)
  Global addition.addition                    = GetFunction(#DLL,"addition")
  OpenConsole()
  PrintN( Str(IsLibrary(#DLL)))
  PrintN(Str(addition(*nombre)))
 Debug  Str(IsLibrary(#DLL))
  Debug Str(addition(*nombre))
Delay(30000)
  CloseConsole()
J'ai testé avec PB 4.30 V finale et avec Ubuntu 8.10 et Debian

Si quelqu'un a une idée sur le problème.

Merci d'avance

Sébastien

Publié : ven. 10/avr./2009 13:35
par Anonyme
ProcedureDLL.b addition(*nombre1.b)
*nombre1 = 5
ProcedureReturn *nombre1
EndProcedure
un pointeur de byte ? la "convention" n'est pas bonne.

Code : Tout sélectionner

ProcedureCDLL.b addition(nombre1.b)
nombre1 = 5
    ProcedureReturn nombre1
EndProcedure 
le .so doît être sois dans le dossier ./compiler ou dans ./usr/lib

Publié : ven. 10/avr./2009 14:11
par f1roe
Merci pour ton aide Cpl.Bator
Effectivement ça marche dès que je mets la librairie dans /usb/lib
Pour le pointeur .b c'est effectivement une belle coquille ! a force triturer le code pour faire des essais...

Cordialement

Sébastien
Cpl.Bator a écrit :
ProcedureDLL.b addition(*nombre1.b)
*nombre1 = 5
ProcedureReturn *nombre1
EndProcedure
un pointeur de byte ? la "convention" n'est pas bonne.

Code : Tout sélectionner

ProcedureCDLL.b addition(nombre1.b)
nombre1 = 5
    ProcedureReturn nombre1
EndProcedure 
le .so doît être sois dans le dossier ./compiler ou dans ./usr/lib