Ruby, C++, Swig некоторые классы не экспортируются

Я работал над тем, чтобы моя библиотека С++ Lavish работала с рубином, используя swig. Проблема в том, что можно использовать только некоторые из классов, которые я включил в файл интерфейса, и я не получаю ошибок во время компиляции пакета или загрузки в ruby. Мой файл интерфейса swig можно посмотреть здесь.

Пример того, что работает, а что нет.

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

Я могу создать объект Display на C++, и я включил заголовок в файл интерфейса swig, поэтому я не знаю, где искать, что не так.

Любые идеи?


person user3705549    schedule 25.02.2010    source источник


Ответы (2)


Оказывается, было несколько проблем, во-первых, файл extconf.rb, который генерирует make-файл для оболочки swig, не пытался связать в фреймворке (swig нуждается в обновленных документах для os x). Вторая проблема, с которой я столкнулся, заключалась в том, что ruby ​​кажется универсальным двоичным файлом для Snow Leopard, но хочет загрузить x86_64, а не версию i386 (поймите сами). Теперь мне нужно перекомпилировать все свои зависимости в универсальных фреймворках x86_64. Я уверен, что есть способ заставить i386, но я бы предпочел иметь 64-битную поддержку там, где она доступна.

person user3705549    schedule 25.02.2010

Действительно ли скомпилированная библиотека скомпилирована? (И не только оболочка интерфейса SWIG)

проблема с динамическим компоновщиком ??? Программа не знает, где находится библиотека для вашей программы. Попробуйте установить LD_LIBRARY_PATH с каталогом вашей библиотеки.

person Phong    schedule 25.02.2010
comment
Я знаю, что он не может найти символ, но если это проблема компоновщика, то либо ruby ​​не сможет загрузить библиотеку, либо попытка создать другой класс из той же dll не будет работать должным образом. - person user3705549; 25.02.2010
comment
Просто для ясности это на osx, снежный барс. Я создал библиотеку C++ с помощью xcode и скопировал полученную структуру в /Libraries/Frameworks. При компиляции библиотеки swig он без проблем находит библиотеку и ссылается на нее. Логи могу выложить если надо. - person user3705549; 25.02.2010