安裝twitter storm集羣組件ZeroMQ,jzmq時遇到的一系列問題


最近在學習twitter storm 實時計算框架時遇到的一些小問題,在安裝完storm,zookeeper,ZeroMQ以後,在安裝jzmq時出現了一些小問題,通過認真的分析思考+查閱英文,終於解決這些很頭疼的小問題。 html

問題一場景:(直接在linux上git clone jzmq源碼的請略過,看後面有更多你期待的問題,Jump ->」問題二「之後) java

執行./autogen.sh腳本後報以下異常: linux

-bash: ./autogen.sh: /bin/sh^M: bad interpreter: No such file or directory  git

分享一下產生此問題的緣由:個人git安裝在本地(系windows),git clone jzmq的項目代碼後,又利用ssh客戶端上傳到linux客戶機器上,在linux上執行 shell

cd  jzmq  vim

./autogen.sh windows

報以下異常:-bash: ./autogen.sh: /bin/sh^M: bad interpreter: No such file or directory  bash

分析:這是因爲不一樣系統編碼格式引發的:在windows系統中編輯的.sh文件可能有不可見字符,因此在Linux系統下執行會報以上異常信息。  框架

解決(直接在linux上git clone 的請略過,看後面有更多你期待的問題,Jump ->」問題二「之後哦): less

首先要確保文件有可執行權限 

#sh>chmod  a+x ./autogen.sh

而後修改文件格式 

#sh>vim  autogen.sh

輸入以下命令查看文件格式 

:set ff 或 :set fileformat 

能夠看到以下信息:

fileformat=dos 或 fileformat=unix 

利用以下命令修改文件格式 

:set ff=unix 或 :set fileformat=unix 

:wq (存盤退出) 

最後再執行文件 

#sh>./autogen.sh

ok!

問題二場景:

再次運行./autogen.sh 報缺乏:pkg-config工具

wget  http://pkgconfig.freedesktop.org/releases/pkg-config-0.23.tar.gz

 tar  zxf  pkg-config-0.23.tar.gz

 cd  pkg-config-0.23

./configure --prefix=/usr/local/pkg-config-0.23 --datarootdir=/usr/share

 make

 sudo make install

安裝完成後設置PATH:(後面要用到pkg-config)

 export  PATH=.:/usr/local/pkg-config-0.23/bin:$PATH

(注意:請選擇pkg-config-0.23.tar.gz或以前版本安裝,我選擇了0.25或0.26最新版本make是折騰了好久通不過,請不要再重複掉到這個坑裏,pkg-config-0.23以前版本的安裝也是有些小陷阱的,請參閱下面)

小陷阱——安裝 pkg-config<=0.23須要注意的地方:

./configure  --prefix=/usr/local/pkg-config-0.23  --datarootdir=/usr/share

--prefix=/usr/local/pkg-config-0.23指定pkg-config安裝路徑,這不是重點;

重點是--datarootdir=/usr/share它直接關係到你後面可否成功編譯jzmq.它指明瞭pkg.m4將要存放的位置,jzmq在編譯的過程當中須要調用 PKG_CHECK_MODULES() 宏(Macro),這個Macro是pkg-config和Autoconf/Automake/aclocal交互的主要接口

參閱英文資料:

The main interface between autoconf and pkg-config is the PKG_CHECK_MODULES macro, which provides a very basic and easy way to check for the presence of a given package in the system. Nonetheless, there are some caveats that require attention when using the macro.
大概意思就是:
autoconf和pkg-config的之間的主要的交互接口是經過PKG_CHECK_MODULES宏,它提供了一個很是基本的和簡單的方法來檢查系統中的一個給定的包是否存在。然而使用宏時,也有一些須要注意的事項。

語法:

PKG_CHECK_MODULES(prefix, list-of-modules, action-if-found, action-if-not-found)

參數的意思參閱:

prefix
Each call to PKG_CHECK_MODULES should have a different prefix value (with a few exceptions discussed later on). This value, usually provided in uppercase, is used as prefix to the variables holding the compiler flags and libraries reported by pkg-config.

For instance, if your prefix was to be FOO you'll be provided two variables FOO_CFLAGS and FOO_LIBS.

This will also be used as message during the configure checks: checking for FOO....

list-of-modules
A single call to the macro can check for the presence of one or more packages; you'll see later how to make good use of this feature. Each entry in the list can have a version comparison specifier, with the same syntax as the Requires keyword in the data files themselves.

action-if-found, action-if-not-found
As most of the original autoconf macros, there are boolean values provided, for the cases when the check succeeded or failed. In contrast with almost all of the original macros, though, the default action-if-not-fault will end the execution with an error for not having found the dependency.

本例中生成的pkg.m4文件應該存在於 /usr/share/aclocal下。這個關係到autoconf和pkg-config的之間經過CALL PKG_CHECK_MODULES宏來檢查給定依賴包是否存在,不然在編譯JZMQ時將會報告」Syntax error  ./configure: line 15272:  PKG_CHECK_MODULES(' ` ".

cd   ~/jzmq

./configure  

$ ........ chechking  for  .......

ok,success!

$ make

...

make[1]: *** No rule to make target `classdist_noinst.stamp', needed by `org/zeromq/ZMQ.class'.  Stop.

make: *** [all-recursive] Error 1

 而後,touch 「classdist_noinst.stamp」:

$ touch src/classdist_noinst.stamp
$ make
...
make[1]: *** No rule to make target `org/zeromq/ZMQException.class, needed by `all'.  Stop.
make: *** [all-recursive] Error 1

 而後, 編譯class:

$ cd src/org/zeromq/
$ /jzmq/src/org/zeromq]$ javac  *.java
$ cd ..
$ make
...  success!
$ sudo make install


so then jzmq has installed  successfully and enjoy  it yourself!

相關文章
相關標籤/搜索