Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu] Erreur de compilation: Code::Blocks, SFML 2.1 bibliothèques dynamiques  (Lu 1972 fois)

0 Membres et 1 Invité sur ce sujet

blackmetal

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
    • E-mail
Bonjour,

J'ai crée une bibliothèque dynamique à l'aide de Code::Blocks et SFML 2.1. A la base, le code était dans un projet console classique et il compile et fonctionne correctement.
J'ai tenté de le passer en bibliothèque dynamique. J'ai donc utilisé l'utilitaire de Code::Blocks pour le faire. J'ai une bibliothèque qui contient des fichiers .h, .hxx (templates) et un fichier .cc
J'ai correctement ajouté le DLL_EXPORT devant chacune des fonctions du .cc que je voulais pouvoir utiliser.
La compilation et le linkage fonctionne correctement. Un .dll, .a et .def sont créés au bon endroit.
J'ai compilé avec le flag SFML_STATIC ainsi que toutes les libs sfml-xxx-s ou -s-d selon Debug/Release.

J'ai crée un second projet console dans lequel j'utilise la bibliothèque que j'ai fabriquée. Pour ca, je définie le lien des includes et des libs puis je défini quelles libs je veux utiliser: la mienne donc qui s'appelle: "libinterface_engine.a"

Dans ce second projet, si je ne fais qu'include le code de ma bibliothèque, la compilation se passe bien et le programme se lance. Par contre, quand je tente d'utiliser ce code, voici le message d'erreur que j'obtiens:
||=== Build: Release in interface_test (compiler: GNU GCC Compiler) ===|
obj\Release\src\FormNothing.o:FormNothing.cpp|| undefined reference to `vtable for Interface::Form::FormNothing'|
obj\Release\src\FormNothing.o:FormNothing.cpp:(.text$_ZN12LibInterface7Element5IFormIN9Interface4Form11FormNothingEE4DrawEPN2sf12RenderWindowE[__ZN12LibInterface7Element5IFormIN9Interface4Form11FormNothingEE4DrawEPN2sf12RenderWindowE]+0x17)||undefined reference to `_imp___ZN2sf12RenderStates7DefaultE'
|
obj\Release\src\FormNothing.o:FormNothing.cpp:(.text$_ZN12LibInterface7Element5IFormIN9Interface4Form11FormNothingEE4DrawEPN2sf12RenderWindowE[__ZN12LibInterface7Element5IFormIN9Interface4Form11FormNothingEE4DrawEPN2sf12RenderWindowE]+0x24)||undefined reference to `_imp___ZN2sf12RenderTarget4drawERKNS_8DrawableERKNS_12RenderStatesE'|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

Je ne comprends pas l'erreur car ce même code avec les mêmes includes fonctionne parfaitement si je ne fais pas de bibliothèque et que je met tout dans le même projet.
Pour info: J'utilise Code::Blocks 13.12, je compile SFML en static (GCC 4.7 TDM (SJLJ) - 32 bits).
J'ai joint à ce post les images de mon arborescence sous Code::Blocks. Ma lib s'appelle interface_engine et mon programme interface_test.

Auriez vous une idée?

PS: Si besoin, je peux fournir mon projet complet Code::Blocks avec les sources dedans pour que vous puissiez m'aider.
« Modifié: Mai 27, 2014, 10:03:14 am par blackmetal »

blackmetal

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
    • E-mail
Bon, j'ai fini par linker la SFML en dynamique plutôt qu'en statique. Ca fonctionne correctement même si ca ne fait pas vraiment ce que je voulais.

Merci quand même :)