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

Archive.
f1roe
Messages : 34
Inscription : dim. 04/sept./2005 22:10
Localisation : Lyon 3ème

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

Message 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
Dernière modification par f1roe le ven. 10/avr./2009 14:07, modifié 1 fois.
Anonyme

Message 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
f1roe
Messages : 34
Inscription : dim. 04/sept./2005 22:10
Localisation : Lyon 3ème

Message 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
Répondre