在 solaris 上安装 rb-inotify
Posted
技术标签:
【中文标题】在 solaris 上安装 rb-inotify【英文标题】:Install rb-inotify on solaris 【发布时间】:2011-11-23 09:27:13 【问题描述】:我正在尝试在 Solaris 机器上安装 rb-inotify。 uname -a 的结果:
SunOS test9 5.10 Generic_142901-02 i86pc i386 i86pc
ruby-1.8.7 和 rubygems-1.7.2 已经编译安装但运行后
gem install rb-inotify
我收到以下错误消息:
Building native extensions. This could take a while...
ERROR: Error installing rb-inotify:
ERROR: Failed to build gem native extension.
/usr/local/bin/ruby extconf.rb
checking for ffi.h... no
checking for ffi.h in /usr/local/include... no
checking for rb_thread_blocking_region()... no
checking for ruby_thread_has_gvl_p()... no
checking for ruby_native_thread_p()... no
checking for rb_thread_call_with_gvl()... no
creating extconf.h
creating Makefile
make
Configuring libffi
make -C "/usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi"
make[1]: Entering directory `/usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi'
make "AR_FLAGS=" "CC_FOR_BUILD=" "CFLAGS=" "CXXFLAGS=" "CFLAGS_FOR_BUILD=" "CFLAGS_FOR_TARGET=" "INSTALL=./install-sh -c" "INSTALL_DATA=./install-sh -c -m 644" "INSTALL_PROGRAM=./install-sh -c" "INSTALL_SCRIPT=./install-sh -c" "JC1FLAGS=" "LDFLAGS=" "LIBCFLAGS=" "LIBCFLAGS_FOR_TARGET=" "MAKE=make" "MAKEINFO=/bin/bash /usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi/missing --run makeinfo " "PICFLAG=" "PICFLAG_FOR_TARGET=" "RUNTESTFLAGS=" "SHELL=/bin/bash" "exec_prefix=/usr/local" "infodir=/usr/local/share/info" "libdir=/usr/local/lib" "prefix=/usr/local" "AR=false" "AS=as" "CC=gcc" "CXX=g++" "LD=/usr/ccs/bin/ld" "NM=/usr/ccs/bin/nm -p" "RANLIB=:" "DESTDIR=" all-recursive
make[2]: Entering directory `/usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi'
Making all in include
make[3]: Entering directory `/usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi/include'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi/include'
Making all in testsuite
make[3]: Entering directory `/usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi/testsuite'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi/testsuite'
Making all in man
make[3]: Entering directory `/usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi/man'
make[3]: Nothing to be done for `all'.
make[3]: Leaving directory `/usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi/man'
make[3]: Entering directory `/usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi'
restore=: && backupdir=".am$$" && \
am__cwd=`pwd` && CDPATH="$ZSH_VERSION+.:" && cd . && \
rm -rf $backupdir && mkdir $backupdir && \
if (/bin/bash /usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi/missing --run makeinfo --version) >/dev/null 2>&1; then \
for f in doc/libffi.info doc/libffi.info-[0-9] doc/libffi.info-[0-9][0-9] doc/libffi.i[0-9] doc/libffi.i[0-9][0-9]; do \
if test -f $f; then mv $f $backupdir; restore=mv; else :; fi; \
done; \
else :; fi && \
cd "$am__cwd"; \
if /bin/bash /usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi/missing --run makeinfo -I doc -I ./doc \
-o doc/libffi.info ./doc/libffi.texi; \
then \
rc=0; \
CDPATH="$ZSH_VERSION+.:" && cd .; \
else \
rc=$?; \
CDPATH="$ZSH_VERSION+.:" && cd . && \
$restore $backupdir/* `echo "./doc/libffi.info" | sed 's|[^/]*$||'`; \
fi; \
rm -rf $backupdir; exit $rc
/bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c -o src/debug.lo src/debug.c
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c src/debug.c -fPIC -DPIC -o src/.libs/debug.o
/bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c -o src/prep_cif.lo src/prep_cif.c
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c src/prep_cif.c -fPIC -DPIC -o src/.libs/prep_cif.o
/bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c -o src/types.lo src/types.c
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c src/types.c -fPIC -DPIC -o src/.libs/types.o
/bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c -o src/raw_api.lo src/raw_api.c
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c src/raw_api.c -fPIC -DPIC -o src/.libs/raw_api.o
/bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c -o src/java_raw_api.lo src/java_raw_api.c
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c src/java_raw_api.c -fPIC -DPIC -o src/.libs/java_raw_api.o
/bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c -o src/closures.lo src/closures.c
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c src/closures.c -fPIC -DPIC -o src/.libs/closures.o
/bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c -o src/x86/ffi64.lo src/x86/ffi64.c
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c src/x86/ffi64.c -fPIC -DPIC -o src/x86/.libs/ffi64.o
/bin/bash ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -I. -I./include -Iinclude -I./src -c -o src/x86/unix64.lo src/x86/unix64.S
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -I. -I./include -Iinclude -I./src -c src/x86/unix64.S -fPIC -DPIC -o src/x86/.libs/unix64.o
/bin/bash ./libtool --tag=CC --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c -o src/x86/ffi.lo src/x86/ffi.c
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -Wall -g -fexceptions -c src/x86/ffi.c -fPIC -DPIC -o src/x86/.libs/ffi.o
/bin/bash ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -I. -I./include -Iinclude -I./src -c -o src/x86/sysv.lo src/x86/sysv.S
libtool: compile: gcc -DHAVE_CONFIG_H -I. -I. -I./include -Iinclude -I./src -I. -I./include -Iinclude -I./src -c src/x86/sysv.S -fPIC -DPIC -o src/x86/.libs/sysv.o
/bin/bash ./libtool --tag=CC --mode=link gcc -Wall -g -fexceptions -version-info `grep -v '^#' ./libtool-version` -o libffi.la -rpath /usr/local/lib src/debug.lo src/prep_cif.lo src/types.lo src/raw_api.lo src/java_raw_api.lo src/closures.lo src/x86/ffi64.lo src/x86/unix64.lo src/x86/ffi.lo src/x86/sysv.lo
libtool: link: gcc -shared -Wl,-z -Wl,text -Wl,-h -Wl,libffi.so.5 -o .libs/libffi.so.5.0.10 src/.libs/debug.o src/.libs/prep_cif.o src/.libs/types.o src/.libs/raw_api.o src/.libs/java_raw_api.o src/.libs/closures.o src/x86/.libs/ffi64.o src/x86/.libs/unix64.o src/x86/.libs/ffi.o src/x86/.libs/sysv.o -lc
libtool: link: (cd ".libs" && rm -f "libffi.so.5" && ln -s "libffi.so.5.0.10" "libffi.so.5")
libtool: link: (cd ".libs" && rm -f "libffi.so" && ln -s "libffi.so.5.0.10" "libffi.so")
libtool: link: ( cd ".libs" && rm -f "libffi.la" && ln -s "../libffi.la" "libffi.la" )
/bin/bash ./libtool --tag=CC --mode=link gcc -Wall -g -fexceptions -o libffi_convenience.la src/debug.lo src/prep_cif.lo src/types.lo src/raw_api.lo src/java_raw_api.lo src/closures.lo src/x86/ffi64.lo src/x86/unix64.lo src/x86/ffi.lo src/x86/sysv.lo
libtool: link: false cru .libs/libffi_convenience.a src/.libs/debug.o src/.libs/prep_cif.o src/.libs/types.o src/.libs/raw_api.o src/.libs/java_raw_api.o src/.libs/closures.o src/x86/.libs/ffi64.o src/x86/.libs/unix64.o src/x86/.libs/ffi.o src/x86/.libs/sysv.o
make[3]: *** [libffi_convenience.la] Error 1
make[3]: Leaving directory `/usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi'
make: *** ["/usr/local/lib/ruby/gems/1.8/gems/ffi-1.0.11/ext/ffi_c/libffi"/.libs/libffi_convenience.a] Error 2
然后我在 rb-notify 的 homepage 上发现它是 Linux 内核子系统 inotify 的包装器。这就是我不能在 Solaris 机器上安装它的原因吗?
但是,我知道人们在 Windows 机器上安装 rb-notify 没有任何问题,那么如果 inotify 是一个“Linux 内核子系统”,它怎么能工作呢?
【问题讨论】:
【参考方案1】:inotify 未在 Solaris 中实现。
作为 inotify 的替代方案:
参见 port_create/port_associate:http://blogs.oracle.com/darren/entry/file_notification_in_opensolaris_and dtrace:http://constantin.glez.de/blog/2010/04/how-automatically-update-your-home-media-server-library-dtrace【讨论】:
以上是关于在 solaris 上安装 rb-inotify的主要内容,如果未能解决你的问题,请参考以下文章
在Sun Unix solaris 下安装Oracle8i 最好能给完整的安装步骤