1

cygwin を使用して Windows に Zookeeper C バインディングをインストールしようとしています

次のエラーが表示されます

Creating library file: .libs/libzookeeper_st.dll.a
./.libs/libzkst.a(zk_hashtable.o): In function `collectWatchers':
/usr/local/zookeeper-3.4.3/src/c/src/zk_hashtable.c:285: undefined reference to `__imp__ZOO_SESSION_EVENT'
./.libs/libzkst.a(zk_hashtable.o): In function `do_foreach_watcher':
/usr/local/zookeeper-3.4.3/src/c/src/zk_hashtable.c:273: undefined reference to `__imp__ZOO_SESSION_EVENT'
collect2: ld returned 1 exit status
Makefile:567: recipe for target `libzookeeper_st.la' failed
make: *** [libzookeeper_st.la] Error 1

Linux CentOSで問題なくコンパイルされました

4

1 に答える 1

0

これはおそらく遅すぎます。私はまったく同じ問題を抱えていましたが、Zookeeper 3.4.5 の時点でもまだ存在しています。さらに、新しいバージョンの JRE を使用して起動した場合、提供されたスクリプトは Java.exe を正しく終了できません。

注: 次のソリューションを機能させるには、awk をインストールする必要があります。これを行った後、次の変更を加えて、bash スクリプトを使用して適切にコンパイルおよび実行できるようにすることができます。

  1. ファイル Zookeeper-3.4.x/src/c/src/zk_hashtable.c 内で、ZOO_SESSION_EVENT のすべてのインスタンスを SESSION_EVENT_DEF に置き換えます。これらの定義は、ソースを調べれば同等であり、それらを変更すると適切に作成できます。「make」で定期的にコンパイルできるようになりました。

  2. 最近のバージョンの Java を使用している場合、Zookeeper の bin ディレクトリにあるスクリプト (zkServer.sh など) では、Java を適切に強制終了できません。実際、JRE は、Cygwin から渡された SIGINT / SIGKILL などのシグナルに応答しません。これを解決するには、zookeeper-3.4.x/bin/zkServer.sh で以下を変更します。

    ZOOCFG=`cygpath -wp "$ZOOCFG"`
    # cygwin has a "kill" in the shell itself, gets confused
    KILL=/bin/kill
    

    JRE が無視できない Windows taskkill の使用を強制するには、これを次のように置き換えます。

    ZOOCFG=`cygpath -wp "$ZOOCFG"`
    # cygwin has a "kill" in the shell itself, gets confused
    KILL="taskkill /F /PID"
    

    さらに、次の行も削除します。

    $KILL -9 $(cat "$ZOOPIDFILE")
    rm "$ZOOPIDFILE"
    echo STOPPED
    

    それらを次のように置き換えて、作成された Java タスクの Cygwin PID ではなく、Windows PID を taskkill に送信するようにスクリプトを強制します。

    if $cygwin
    then
        CYGPID=$(cat "$ZOOPIDFILE")
        WINPID=$(ps | awk "/$CYGPID/ { print \$4 }")
        $KILL $WINPID
    else
        $KILL $(cat "$ZOOPIDFILE")
    fi
    rm "$ZOOPIDFILE"
    echo STOPPED
    

そして、あなたは完了です!繰り返しますが、2 番目のステップで修正を使用する予定がある場合は、awk がインストールされていることを確認してください。

于 2013-07-10T08:30:14.990 に答える