我一直在努力让我的库c ++ Lavish使用swig使用ruby。问题是只能使用我在接口文件中包含的一些类,并且在编译bundle或在ruby中加载时我没有遇到任何错误。我的swig界面文件可以查看here。
一个有效和无效的例子。
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
我可以用C ++创建Display对象,并且我已经在swig接口文件中包含了标题,所以我不知道在哪里查找错误。
有什么想法吗?
答案 0 :(得分:0)
原来这是一些问题,首先关闭extconf.rb文件,该文件为swig包装器生成makefile而不是试图在框架中链接(swig需要更新osx的文档)。我遇到的第二个问题是,ruby似乎是雪豹的通用二进制文件,但是想要加载x86_64而不是i386版本(去图)。现在我必须在通用框架x86_64中重新编译所有依赖项。我确信有一种方法可以强制使用i386,但我宁愿在可用的情况下提供64位支持。
答案 1 :(得分:-1)
编译的库真的编译好了吗? (而不仅仅是接口SWIG包装器)
动态链接器问题???该程序不知道您的程序库位于何处。尝试使用库目录设置 LD_LIBRARY_PATH 。