试图在OS X上编译vim?

nee*_*zer 5 macos vim compilation

此书面记录 ...

编译后的二进制文件似乎工作正常,但安装的二进制文件失败(运行时make install).

这一步似乎失败了:

...
generating help tags
/usr/local/bin/vim -u NONE -esX -c "helptags ++t ." -c quit
dyld: Symbol not found: _environ
  Referenced from: /Users/neezer/.rvm/rubies/ruby-1.9.2-p0/lib/libruby.1.9.1.dylib
  Expected in: flat namespace
 in /Users/neezer/.rvm/rubies/ruby-1.9.2-p0/lib/libruby.1.9.1.dylib
make[2]: *** [vimtags] Trace/BPT trap
make[1]: [installrtbase] Error 2 (ignored)
Run Code Online (Sandbox Code Playgroud)

我用它来配置:

./configure --prefix=/usr/local --enable-rubyinterp --enable-gui=no --disable-gpm
Run Code Online (Sandbox Code Playgroud)

就像我说的,我认为它正确编译,因为我可以运行./src/vimmake就好了(没有错误).但是当我尝试在安装后运行已安装的版本make install/usr/local/bin/vim,我得到了这个(上面的镜像):

dyld: Symbol not found: _environ
  Referenced from: /Users/neezer/.rvm/rubies/ruby-1.9.2-p0/lib/libruby.1.9.1.dylib
  Expected in: flat namespace
 in /Users/neezer/.rvm/rubies/ruby-1.9.2-p0/lib/libruby.1.9.1.dylib
[1]    13175 trace trap  vim
Run Code Online (Sandbox Code Playgroud)

运行which vim验证它是否正在尝试加载新的二进制文件/usr/local/bin/vim.

我目前的Ruby版本是ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.5.0]通过RVM.

这里发生了什么事?

不,我不想只使用MacVim ......

mip*_*adi 7

在博客文章中说:

你可能已经成为一个(目前)没有很好记录的问题的牺牲品:Vim 7.2不支持在Snow Leopard上集成Ruby 1.9.x.

此票证中提供了更多信息.

但总的来说,你必须链接Ruby 1.8.7,无论如何这是Snow Leopard附带的版本.


Fa1*_*gel 7

Vim无法使用Ruby 1.9.X进行编译(将来可能会修复).如果要使用ruby集成,则必须使用Ruby 1.8.X进行编译.

如果使用rbenv而不是rvm,则可以在.zshenv或​​.bash_profile文件中更改为ruby 1.8.7或禁用rbenv,重新编译vim并再次启用当前的ruby.这也适用于OSX 10.6.我已经在OSX 10.7和10.8上测试了这个解决方案.

对于zsh和rbenv:

# disable in your .zshenv for compile time. Just comment it out for comile time.
# eval "$(rbenv init -)"
Run Code Online (Sandbox Code Playgroud)

对于bash和rbenv:

# disable in .bash_profile or .bashrc for compile time. Just comment it out for comile time.
# eval "$(rbenv init -)"
Run Code Online (Sandbox Code Playgroud)

对于rvm,您可以切换到系统ruby(osx),重新编译并切换回来

rvm use system
brew uninstall vim
brew install vim
rvm use 1.9.3
Run Code Online (Sandbox Code Playgroud)