Page 1 sur 1
[LINUX] Librairie dynamique & c++.
Publié : dim. 27/mai/2007 19:37
par Anonyme
Salut à tous, voila je suis en train de me faire une p'tite lib sous nunux
et je voudrais l'exporter en .so pour pouvoir exporté les fonctions sous purebasic.
j'arrive à sortir le .so avec codeblocks, mais je n'arrive pas à l'ouvrir sous purebasic....
Ma lib se compose ainsi :
header
Main.cpp
Main.h
include
Framework.h
openlibrary() me renvois 0

alors que lorsque je code en C (pas en c++)
et que ma lib se compose ainsi :
Main.c
Main.h
etc..
la , sa marche
Y a t'il moyen de faire des lib en c++ pour linux ??
Re: [LINUX] Librairie dynamique & c++.
Publié : dim. 27/mai/2007 20:02
par minirop
Cpl.Bator a écrit :Y a t'il moyen de faire des lib en c++ pour linux ??
ben oui, suffit de compiler avec g++
Publié : dim. 27/mai/2007 20:11
par Anonyme
je compile avec g++

Publié : dim. 27/mai/2007 20:17
par minirop
tu as essayer d'ouvrir un autre .so fait en C++ comme Qt ou wxWidget ?
Publié : dim. 27/mai/2007 20:40
par Anonyme
ca à l'air de fonctionné

Publié : dim. 27/mai/2007 23:59
par KarLKoX
Les fonctions ne sont pas externes lorsqu'elles sont en C++, tu as juste à suivre ce que j'ai dit
ici.
Publié : lun. 28/mai/2007 9:38
par Anonyme
merci, je vais étudier cela

Publié : lun. 28/mai/2007 11:33
par tmyke
Voila ce que j'ai fait, cela semble bien tourner.
Le code C++
Code : Tout sélectionner
class exemple_dune_classe
{
int var;
};
extern "C" int SampleAddInt(int i1, int i2)
{
return i1 + i2;
}
// A function doing nothing ;)
extern "C" void SampleFunction1()
{
// insert code here
}
// A function always returning zero
extern "C" int SampleFunction2()
{
// insert code here
return 0;
}
et le code PB sous le Pinguin pour l'emploi de fichier 'TestSO.so'
Code : Tout sélectionner
Prototype.l SampleAddInt(a.l, b.l)
Prototype SampleFunction1()
Prototype.l SampleFunction2()
Define tes_lib.l = OpenLibrary(#PB_Any, "./TestSO.so")
If Not tes_lib
MessageRequester("Error", "Can't initialize the library `TestSO.so` !", #PB_MessageRequester_YesNo) : End
EndIf
Global SampleAddInt.SampleAddInt = GetFunction(tes_lib, "SampleAddInt")
Global SampleFunction1.SampleFunction1 = GetFunction(tes_lib, "SampleFunction1")
Global SampleFunction2.SampleFunction2 = GetFunction(tes_lib, "SampleFunction2")
;--
;-- Vérifie si les fonctions sont bien initialisées.
;--
Debug "======================"
Debug tes_lib
Debug "----------"
Debug SampleAddInt
Debug SampleFunction1
Debug SampleFunction2
Debug "======================"
Debug SampleAddInt(2,2)
Publié : lun. 28/mai/2007 12:21
par Anonyme
Essaye avec le code de la dll pour windows, ca ne marche pas, quel que soit la méthode employé... c'est certainement du à la poo à l'intérieur du code...
faut revoir l'architecture d'une lib portable...

Publié : lun. 28/mai/2007 12:33
par tmyke
OK, je vois cela, je transpose le code d'ici a ce soir et je verais bien...
Publié : lun. 28/mai/2007 13:48
par Anonyme
J'ai trouvé le bug, c'est une erreur de linkage entre purebasic & et opengl, avec sdl pas de problème...
Publié : lun. 28/mai/2007 13:55
par Anonyme
Au sujet du linker, peut on via le préprocesseur faire différent linkage , sans passé par l'ide de codeblock ?
ps: sa marche.
