Erlang error?

1829 단어
<!-- lang: shell -->

Unable to load crypto library. Failed with error:
"load_failed, Failed to load NIF library: '/usr/local/erlang/R16B03-1/lib/erlang/lib/crypto-3.2/priv/lib/crypto.so: undefined symbol: EC_GROUP_new_curve_GF2m'"
OpenSSL might not be installed on this system.
make: *** [deps] Error 1
[root@lambda-laptop riak]# erl


  。。
 edit lib/crypto/c_src/crypto.c and change:

#if OPENSSL_VERSION_NUMBER >= 0x009080ffL \
        && !defined(OPENSSL_NO_EC) \
        && !defined(OPENSSL_NO_ECDH) \
        && !defined(OPENSSL_NO_ECDSA)
# define HAVE_EC
#endif



#if OPENSSL_VERSION_NUMBER >= 0x009080ffL \
        && !defined(OPENSSL_NO_EC) \
        && !defined(OPENSSL_NO_EC2M) \
        && !defined(OPENSSL_NO_ECDH) \
        && !defined(OPENSSL_NO_ECDSA)
# define HAVE_EC
#endif



http://erlang.org/pipermail/erlang-questions/2013-December/076327.html

진작에 이걸 봤으면 좋았을 텐데. 나도strace로 폴을 사용한 것을 발견했고,erlang의 분포식 노드 통신 방식을 알아냈다.
erlang 분포식 노드 통신, A 노드는 B 노드를 연결하고 같은 기계에서 프로세스 간 통신만 하면 노드를 찾을 수 있습니다.같은 기계에 있지 않고 A는 먼저 B가 있는 기계의 4369 포트를 연결하여 노드를 찾는다.찾으면 B 노드에게 포트를 감청하라고 통지하고 A에게 이 포트를 연결하라고 회답합니다.
4369 포트를 감청하는 것은 백엔드 프로세스 epmd입니다. linux에서 select를 사용합니다. 짧은 연결만 만듭니다.윈도우즈에는 epmd입니다.exe.linux에서 노드의 감청 포트는poll을 사용하고 +Ktrue 파라미터를 지정한 후에 epoll을 사용합니다. 당연히 컴파일이 필요할 때 스위치를 켜야 합니다.
각 노드는 하나의 포트만 감청할 수 있고 2개의 노드 간에 연결을 구축한 후에 노드 간의 임의의 방향의 통신은 모두 이 연결을 걷게 된다. 이런 통신 방식이 가장 합리적이다. 나도 이런 방식을 사용하고 싶다. 그러나 이런 방식은 통상적으로 비동기적인 조작으로 실현되기 때문에 비교적 복잡하기 때문에 줄곧 하지 않았다.
여러 노드 간에 따르는 규칙은 다음과 같다. 1. 각 노드는 하나의 포트만 감청한다.2. A 노드가 B 노드를 연결하고 아직 연결이 되지 않으면 A connect를 B로 연결한다.만약 B가 아직 감청 포트를 가지고 있지 않다면, 포트를 열어 감청한다.
이런 방식은 임의의 두 노드 사이의 연결을 끊고 다른 노드에 영향을 주지 않도록 보장할 수 있다. 왜냐하면 그것은 그물 모양의 연결을 사용하기 때문이다.

좋은 웹페이지 즐겨찾기