[LINUX] Librairie dynamique & c++.

Programmation d'applications complexes
Anonyme

[LINUX] Librairie dynamique & c++.

Message 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 ??
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Re: [LINUX] Librairie dynamique & c++.

Message 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++
Anonyme

Message par Anonyme »

je compile avec g++ :?
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message par minirop »

tu as essayer d'ouvrir un autre .so fait en C++ comme Qt ou wxWidget ?
Anonyme

Message par Anonyme »

ca à l'air de fonctionné :?
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Les fonctions ne sont pas externes lorsqu'elles sont en C++, tu as juste à suivre ce que j'ai dit ici.
"Qui baise trop bouffe un poil." P. Desproges
Anonyme

Message par Anonyme »

merci, je vais étudier cela :wink:
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message 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)
Force et sagesse...
Anonyme

Message 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... :roll:
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

OK, je vois cela, je transpose le code d'ici a ce soir et je verais bien...
Force et sagesse...
Anonyme

Message par Anonyme »

J'ai trouvé le bug, c'est une erreur de linkage entre purebasic & et opengl, avec sdl pas de problème...
Anonyme

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