Toptal的一位开发人员最近遇到了一个问题,当时他需要安装一个 capybare-webkit on a Mac OS X.
Mac OS X Mavericks发布时也出现了问题. 当时的解决方案是替换内置编译器 clang
to gcc/g++
. This was simple - with brew you would just install gcc
把下面几行写进你的 .dotfiles:
# Because of Maverick...
#export CC=/usr/local/bin/gcc-4.2
#出口CXX = / usr /地方/ bin / g + + 4.2
这两个编译器在过去一年中为我们的开发人员提供了很好的服务. 直到新的Mac OS X发布,Yosemite发布. 更新后,编译器开始抛出以下错误:
g++ -pipe -O2 -arch x86_64 -Xarch_x86_64 -mmacosx-version-min=10.5 -Wall -W -DQT_NO_DEBUG
Dqt_webkit_lib -dqt_gui_lib -dqt_network_lib -dqt_core_lib -dqt_shared . lib
I/usr/local/Cellar/qt/4.8.7/mkspecs/macx-g++ -I.
I/usr/local/Cellar/qt/4.8.7/lib/QtCore.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7/lib/QtCore.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7/lib/QtNetwork.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7/lib/QtNetwork.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7/lib/QtGui.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7/lib/QtGui.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7/lib/QtWebKit.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7/lib/QtWebKit.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7 . /include -Ibuild -F/usr/local/Cellar/qt/.8.7/lib -x c++-header
c stable.h -o build/webkit_server.gch/c++ gcc -pipe -O2 -arch x86_64 -Xarch_x86_64
mmacosx-version-min=10.dqt_no_debug -DQT_WEBKIT_LIB -DQT_GUI_LIB
DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Cellar/qt/.8.7/mkspecs/macx-g++ -I.
I/usr/local/Cellar/qt/4.8.7/lib/QtCore.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7/lib/QtCore.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7/lib/QtNetwork.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7/lib/QtNetwork.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7/lib/QtGui.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7/lib/QtGui.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7/lib/QtWebKit.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7/lib/QtWebKit.framework/Versions/4/Headers
I/usr/local/Cellar/qt/4.8.7 . /include -Ibuild -F/usr/local/Cellar/qt/.8.7/lib -x objective
c++-header -c stable.h -o build/webkit_server.gch/objective-c++ In文件包含于
/系统/图书馆/框架/ CoreServices.framework/Headers/CoreServices.h:55, from
/系统/图书馆/框架/基础.framework/Headers/NSURLError.h:12, from
/系统/图书馆/框架/基础.framework/Headers/Foundation.h:80, from
/系统/图书馆/框架/可可.framework/Headers/Cocoa.h:12, from
/usr/local/Cellar/qt/4.8.7/include/QtGui/qmacdefines_mac.h:113, from
/usr/local/Cellar/qt/4.8.7/include/QtGui/qwindowdefs.h:99, from
/usr/local/Cellar/qt/4.8.7/lib/QtGui.框架/版本/ 4 /头/ qapplication.h:46, from
/usr/local/Cellar/qt/4.8.7/lib/QtGui.框架/版本/ 4 /头/ QApplication: 1,
stable.h:1:
/系统/图书馆/框架/ CoreServices.framework/Frameworks/FSEvents.framework/Headers/FSEvents.H:262:错误:' __attribute__ '之前期望'}'
/系统/图书馆/框架/ CoreServices.framework/Frameworks/FSEvents.framework/Headers/FSEvents.H:262:错误:' = '令牌前预期的非限定id
/系统/图书馆/框架/ CoreServices.framework/Frameworks/FSEvents.framework/Headers/FSEvents.H:414:错误:' __attribute__ '之前期望'}'
/系统/图书馆/框架/ CoreServices.framework/Frameworks/FSEvents.framework/Headers/FSEvents.H:414:错误:' = '令牌前预期的非限定id
/系统/图书馆/框架/ CoreServices.framework/Frameworks/FSEvents.framework/Headers/FSEvents.H:493:错误:在'}'令牌make[1]之前期望声明:
*** [build/webkit_server.[sub-src-webkit_server-pro-make_default-ordered]错误2命令“make”失败
不幸的是,他无法取代 capybara-webkit
with poltergeist所以他别无选择,只能想办法安装 capybara-webkit
关于他的新操作系统更新.
Both capybara-webkit
and poltergeist
为Ruby on Rails社区提供非常有用的工具,用于对JavaScript密集型web应用程序进行端到端测试. 它们都在Ruby on Rails生态系统中扮演着重要的角色.
Anyway, after some googling 花很多时间在 Stack overflow, a fellow Toptal Ruby on Rails developers finally helped him.
问题是他在吸毒 gcc
compiler instead of cland
compiler, because gcc
编译器不能识别Objective-C扩展头文件. 最后的解决方案还是很简单,他只需要改变 gcc/g++
to clang
in his .dotfiles
:
export CC=clang
export CXX=clang++
After that change, capybara-webkit
finally compiled successfully. 他学到的教训是,一个糟糕的解决方案会给这个领域带来另一个问题. 我们希望你也能从他的经验中学到一些新的东西.