Hatena::ブログ(Diary)

yohpapaの日記

2011-11-13

Android NDK: Host 'awk' tool is outdated. Please define HOST_AWK to point to Gawk or Nawk !

先日リリースされたNDK r7を使った時に若干ハマったのでメモしときます。

いつものようにこちらからダウンロードして、適当なディレクトリに解凍、パスを通しておしまい・・・と思って、もともとあったソースコードをビルドしてみると


% ndk-build -B 
[...]/android-ndk-r7/prebuilt/linux-x86/bin/awk: 1: ELF: not found
[...]/android-ndk-r7/prebuilt/linux-x86/bin/awk: 4: Syntax error: word unexpected (expecting ")")
Android NDK: Host 'awk' tool is outdated. Please define HOST_AWK to point to Gawk or Nawk !    
[...]/android-ndk-r7/build/core/init.mk:258: *** Android NDK: Aborting.    .  Stop.

あれれ?なんか怒られた。。。

こんなことは初めて。さてどうしたものかとネットを漁ってみたけどサクッとは見つからず。INSTALL.htmlを読むと


The NDK also requires a Nawk or GNU Awk executable being available on your
development system. Note that the original 'awk' program doesn't implement
the 'match' and 'substr' functions used by the NDK build system.

なるほど。オリジナルのawkではNG。gawkかnawkが必要とのこと。

でも確認してみるとgawkもnawkもインストールされています。


% which gawk
/usr/bin/gawk
% which nawk    
/usr/bin/nawk

どうしようもないのでエラーが発生しているinit.mkを見てみました。


AWK_TEST := $(shell $(HOST_AWK) -f $(BUILD_AWK)/check-awk.awk)
$(call ndk_log,Host 'awk' test returned: $(AWK_TEST))
ifneq ($(AWK_TEST),Pass)
    $(call __ndk_info,Host 'awk' tool is outdated. Please define HOST_AWK to point to Gawk or Nawk !)
    $(call __ndk_error,Aborting.)
endif

よくは分かりませんが、


$(shell $(HOST_AWK) -f $(BUILD_AWK)/check-awk.awk)

が失敗しているのが原因のようです。元々のエラーメッセージにもHOST_AWKを設定しろ、とありました。ではHOST_AWKはどのように定義されているのでしょうか?

どうもこの辺です。


# Check for NDK-specific versions of our host tools
HOST_PREBUILT := $(strip $(wildcard $(NDK_ROOT)/prebuilt/$(HOST_TAG)/bin))
ifdef HOST_PREBUILT
    $(call ndk_log,Host tools prebuilt directory: $(HOST_PREBUILT))
    HOST_AWK := $(wildcard $(HOST_PREBUILT)/awk$(HOST_EXEEXT))
    HOST_SED  := $(wildcard $(HOST_PREBUILT)/sed$(HOST_EXEEXT))
    HOST_MAKE := $(wildcard $(HOST_PREBUILT)/make$(HOST_EXEEXT))
else
    $(call ndk_log,Host tols prebuilt directory not found, using system tools)
endif

HOST_AWKには「android-ndk-r7/prebuilt/linux-x86/bin/awk」が設定されているようです。なので設定されていないわけではないですね。でもこのawkがおかしいみたい。

実際実行してみると


% ./awk_ --version
zsh: exec format error: ./awk

あれれ?フォーマットエラー??


% file ./awk
./awk: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

どうも64bit用のバイナリのようです。私のPCは32bitなのでNGです。あ〜すっきり。適当にシンボリックリンクを張ってみました。


% mv awk awk_
% ln -s /usr/bin/gawk ./awk

ビルド (ndk-build -B) も通り、めでたしめでたし。

JorgeJorge 2011/11/18 05:08 Thanks! I didn't understand a word, but I solved the problem thanks to the commands at the end of the post :)

JorgeJorge 2011/11/18 05:09 Thanks! I didn't understand a word, but I solved the problem thanks to the commands at the end of the post :)

yohpapayohpapa 2011/11/19 22:43 Hey Jorge!
I'm happy that my blog have helped to solve your probrem. By the way, I've been wondering why NDKr7 don't have awk for x86...

tamtam 2011/11/30 21:35 hi yohappa,
i'm glad that your commands helped me to solve the issue.. :-)

yohpapayohpapa 2012/01/02 00:26 Hi tam!
Thanks your comment! I'm also glad that my blog helped you!!

dangvietchaudangvietchau 2012/01/11 20:31 Hi yohpapa,
takemashita! arigatou~!

yohpapayohpapa 2012/01/11 23:56 Hi dangvietchau!
Dou-itashimashite!! (You're welcome!!)

vadimvadim 2012/01/18 19:40 Thank you!

yohpapayohpapa 2012/01/18 23:13 You're welcome, vadim!
I'm happy that my article helped you!

hiruconhirucon 2012/01/31 09:34 非常に助かりました!ありがとうございます。

yohpapayohpapa 2012/03/22 00:16 hiruconさん
お返事めちゃくちゃ遅れてしまいました。
どういたしましてです。お役に立ててよかったです。

lidanaeemlidanaeem 2012/05/28 19:38 多谢帮助,同上,只看懂了cmd。

yohpapayohpapa 2012/05/28 22:14 你好 lidanaeem!
感谢您的评论。我很高兴我的文章帮助你。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

リンク元