【发布时间】:2012-02-08 08:38:24
【问题描述】:
我正在尝试编写一个 Ruby 扩展,并且我整天都在成功编译我的 nmatrix.so 共享对象文件。但是,突然之间,它开始生成nmatrix.bundle,而根本没有任何.so 文件。
它没有给我任何链接器错误,所以我无法想象为什么会这样。我也没有更改my Makefile or extconf.rb 中的任何内容。我一直在通过 rvm 使用 Ruby 1.9.3p0。
我已经尝试用我今天的工作做一个git stash save 并编译一些我知道应该在没有链接器错误的情况下工作(产生一个.so 的东西)。不幸的是,这也会产生一个.bundle 文件。
很明显,我做了一些事情——也许是无意中安装了一些东西——这改变了一些关键的 GCC 设置。这是完全可能的,因为我花了一天的大部分时间尝试构建 LAPACK 和 ATLAS,并且在某个时候还安装了自制软件。
我发现有一种解决方法。我改变了这两行:
DLLIB = $(TARGET).bundle
# ...
LDSHARED = $(CC) -dynamic -bundle
到
DLLIB = $(TARGET).so
# ...
LDSHARED = $(CC) -dynamic
然后库编译并正确加载。但是,我在extconf.rb(或其他地方)中所做的更改并没有最微弱,这会导致它使用.bundle 文件而不是.so 自动生成这个Makefile。
问题是:我究竟是如何造成这种情况的,我该怎么做才能恢复它?
【问题讨论】:
-
你能附上你的
Makefile吗? -
完成。 Makefile 是使用
rvm ruby extconf.rb自动生成的,所以我也包含了extconf.rb。
标签: c ruby macos gcc shared-libraries