2010-02-25 6 views
0

J'ai travaillé sur l'obtention de ma bibliothèque C++ Lavish travaillant avec ruby ​​utilisant swig. Le problème est que seules certaines des classes que j'ai incluses dans le fichier d'interface peuvent être utilisées et je ne reçois aucune erreur lors de la compilation du paquet ou du chargement dans ruby. Mon fichier d'interface de swig peut être consulté here.Ruby, C++, Swig certaines classes ne sont pas exportées

Un exemple de ce qui fonctionne et de ce qui ne marche pas.

sean$ irb 
>> require "lavish" 
=> true 
>> v1 = Lavish::Vector2.new(1,2) 
=> #<Lavish::Vector2:0x1011a25a0> 
>> puts v1.x 
1.0 
=> nil 
>> display = Lavish::Display.new 
dyld: lazy symbol binding failed: Symbol not found: __ZN6lavish7DisplayC1Ev 
    Referenced from: /Users/seanc/Desktop/Lavish/samples/ruby/Tutorial 2 - Displaying A Triangle/lavish.bundle 
    Expected in: flat namespace 

dyld: Symbol not found: __ZN6lavish7DisplayC1Ev 
    Referenced from: /Users/seanc/Desktop/Lavish/samples/ruby/Tutorial 2 - Displaying A Triangle/lavish.bundle 
    Expected in: flat namespace 

Trace/BPT trap 

je peux créer l'objet d'affichage en C++ et je l'ai inclus l'en-tête dans le fichier d'interface rasade donc je ne sais pas où chercher ce qui est faux.

Des idées?

Répondre

-1

La bibliothèque compilée est-elle vraiment compilée? (Et pas seulement l'interface SWIG wrapper)

problème de lien dynamique ??? Le programme ne sait pas où se trouve la bibliothèque pour votre programme. Essayez de définir LD_LIBRARY_PATH avec le répertoire de votre bibliothèque.

+0

Je sais qu'il ne peut pas trouver le symbole, mais s'il s'agissait d'un problème d'éditeur de liens alors que ruby ​​ne parviendrait pas à charger la bibliothèque ou essayer de créer une autre classe de la même DLL ne fonctionnerait pas correctement. – user3705549

+0

Juste pour plus de clarté c'est sur osx, snow léopard. J'ai construit la librairie C++ avec xcode et copié la structure résultante dans/Libraries/Frameworks. Lors de la compilation de la bibliothèque swig, il trouve la bibliothèque et les liens qui s'y rapportent sans problème. Je peux poster des journaux si nécessaire. – user3705549

0

Il s'avère que c'était quelques problèmes, tout d'abord sur le fichier extconf.rb qui génère le makefile pour l'encapsuleur swig n'essayait pas de lier dans le cadre (swig a besoin de documents mis à jour pour os x). Le deuxième problème que j'ai eu était que ruby ​​semble être un binaire universel sur snow leopard mais veut charger x86_64 et pas la version i386 (allez figure). Maintenant, je dois recompiler toutes mes dépendances dans des frameworks universels x86_64. Je suis sûr qu'il y a un moyen de forcer i386 mais je préférerais avoir un support 64 bits quand c'est possible.

Questions connexes