我想写一个Ruby扩展,并且我一直在成功编译我的nmatrix.so
共享对象文件。但是,突然间,它开始生产nmatrix.bundle
,而没有任何.so
文件。我是如何让gcc生成.bundle而不是.so的?
它没有给我任何链接错误,所以我无法想象为什么会这样。我也没有改变my Makefile
or extconf.rb
中的任何内容。我一直使用Ruby 1.9.3p0到rvm。
我试过在做我的日常工作并编译一些东西我知道应该在没有链接器错误(产生.so的东西)之前工作。不幸的是,这也产生了.bundle
文件。
很明显,我已经做了一些事情 - 可能是无意中安装了某些东西 - 这已经改变了一些关键的GCC设置。这是完全可能的,因为我一整天的大部分时间都在尝试让LAPACK和ATLAS构建,并且在某些时候也安装了自制软件。
我发现有一种解决方法。我改变这两条线:
DLLIB = $(TARGET).bundle
# ...
LDSHARED = $(CC) -dynamic -bundle
到
DLLIB = $(TARGET).so
# ...
LDSHARED = $(CC) -dynamic
然后库编译和加载正确。然而,我并没有在extconf.rb
(或其他地方)更改我自己生成的这个Makefile文件,而不是.so
。
问题是:我是如何造成这种情况的,我该如何恢复它?
你可以加入你的'Makefile'吗? – sarnold 2012-01-12 00:24:14
完成。 Makefile是使用'rvm ruby extconf.rb'自动生成的,因此我也包含了'extconf.rb'。 – 2012-01-12 04:16:25