Doc*_*awk 6 c ruby macos gcc shared-libraries
我正在尝试编写Ruby扩展,并且我已经nmatrix.so整天成功编译了我的共享对象文件.但是,突然间,它开始生产nmatrix.bundle,而没有任何.so文件.
它没有给我任何链接器错误,所以我无法想象为什么会这样.我也没有改变我的Makefile或extconf.rb.我一直在使用Ruby 1.9.3p0到rvm.
我已经尝试过git stash save我今天的工作并编译我知道应该在没有链接器错误(产生.so的东西)之前工作的东西.不幸的是,这也产生了一个.bundle文件.
很明显,我已经做了一些事情 - 可能是无意中安装了一些东西 - 这改变了一些关键的GCC设置.这是完全可能的,因为我花了大部分时间试图让LAPACK和ATLAS构建,并且还在某些时候安装了自制软件.
我发现有一种解决方法.我改变了这两行:
DLLIB = $(TARGET).bundle
# ...
LDSHARED = $(CC) -dynamic -bundle
Run Code Online (Sandbox Code Playgroud)
至
DLLIB = $(TARGET).so
# ...
LDSHARED = $(CC) -dynamic
Run Code Online (Sandbox Code Playgroud)
然后库正确编译和加载.但是,我没有在我extconf.rb(或其他地方)更改的内容,这会导致它自动生成带有.bundle文件的Makefile 而不是.so.
问题是:我究竟是如何造成这种情况的,我该怎么做才能恢复它?
问题似乎来自于 LLVM gcc 的使用,它与 Xcode 4.2 不能很好地配合。
我安装了常规 gcc,因此我重新安装 Ruby,如下所示:
export CC=/usr/bin/gcc-4.2
rvm install 1.9.3
Run Code Online (Sandbox Code Playgroud)
大多数指示似乎都说“使用” rvm install 1.9.3 --enable-shared,但那个附加标志似乎是问题的根源。
无论如何,我现在似乎可以加载.bundle文件了。
| 归档时间: |
|
| 查看次数: |
792 次 |
| 最近记录: |