MacでErlangをコンパイル
MacPortsのErlangにSMPがついてなかったので,ソースからコンパイルして入れてみる.
$ culr -O http://www.erlang.org/download/otp_src_R12B-4.tar.gz $ tar xzfv otp_src_R12B-4.tar.gz $ cd otp_src_R12B-4 $ ./configure --enable-kernel-poll --enable-smp-support --enable-threads $ make
エラーが出る
gcc -c -o ../priv/obj/i386-apple-darwin9.4.0/esock_utils.o -Wall -Wstrict-prototypes -Wmissing-prototypes -Wdeclaration-after-statement -g -O2 -I/Users/ytakano/source/otp_src_R12B-4/erts/i386-apple-darwin9.4.0 -no-cpp-precomp -DHAVE_CONFIG_H -O2 esock_utils.c esock_utils.c: In function ‘esock_malloc’: esock_utils.c:36: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘size_t’ esock_utils.c: In function ‘esock_realloc’: esock_utils.c:48: warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘size_t’ gcc -c -o ../priv/obj/i386-apple-darwin9.4.0/esock_posix_str.o -Wall -Wstrict-prototypes -Wmissing-prototypes -Wdeclaration-after-statement -g -O2 -I/Users/ytakano/source/otp_src_R12B-4/erts/i386-apple-darwin9.4.0 -no-cpp-precomp -DHAVE_CONFIG_H -O2 esock_posix_str.c gcc -c -o ../priv/obj/i386-apple-darwin9.4.0/esock_openssl.o -Wall -Wstrict-prototypes -Wmissing-prototypes -Wdeclaration-after-statement -g -O2 -I/Users/ytakano/source/otp_src_R12B-4/erts/i386-apple-darwin9.4.0 -no-cpp-precomp -DHAVE_CONFIG_H -O2 -I/usr/include esock_openssl.c esock_openssl.c: In function ‘set_ssl_parameters’: esock_openssl.c:903: warning: pointer targets in initialization differ in signedness esock_openssl.c:904: warning: pointer targets in passing argument 1 of ‘strlen’ differ in signedness gcc -g -O2 -I/Users/ytakano/source/otp_src_R12B-4/erts/i386-apple-darwin9.4.0 -no-cpp-precomp -o ../priv/bin/i386-apple-darwin9.4.0/ssl_esock ../priv/obj/i386-apple-darwin9.4.0/esock.o ../priv/obj/i386-apple-darwin9.4.0/debuglog.o ../priv/obj/i386-apple-darwin9.4.0/esock_poll.o ../priv/obj/i386-apple-darwin9.4.0/esock_osio.o ../priv/obj/i386-apple-darwin9.4.0/esock_utils.o ../priv/obj/i386-apple-darwin9.4.0/esock_posix_str.o ../priv/obj/i386-apple-darwin9.4.0/esock_openssl.o -lutil -ldl -lm -L/usr/lib -lssl -lcrypto Undefined symbols: "_SSL_CTX_set_info_callback", referenced from: _set_ssl_parameters in esock_openssl.o ld: symbol(s) not found collect2: ld returned 1 exit status make[4]: *** [../priv/bin/i386-apple-darwin9.4.0/ssl_esock] Error 1 make[3]: *** [opt] Error 2 make[2]: *** [opt] Error 2 make[1]: *** [opt] Error 2 make: *** [libs] Error 2
_SSL_CTX_set_info_callbackが無いとおこられる.見てみる.
$ nm /usr/lib/libssl.dylib | grep _SSL_CTX_set_info_callback
無い・・・
MacPortsからOpenSSL 0.9.8iを入れる.
$ sudo port install openssl
portで入れたやつを見てみる.
$ nm /opt/local/lib/libssl.dylib | grep _SSL_CTX_set_info_callback 00025b70 T _SSL_CTX_set_info_callback
ある.
もう一度コンパイル.
$ ./configure --enable-kernel-poll --enable-smp-support --enable-threads --with-ssl=/opt/local $ make
またエラー.
gcc -g -O2 -I/Users/ytakano/source/otp_src_R12B-4/erts/i386-apple-darwin9.4.0 -no-cpp-precomp -o ../priv/bin/i386-apple-darwin9.4.0/ssl_esock ../priv/obj/i386-apple-darwin9.4.0/esock.o ../priv/obj/i386-apple-darwin9.4.0/debuglog.o ../priv/obj/i386-apple-darwin9.4.0/esock_poll.o ../priv/obj/i386-apple-darwin9.4.0/esock_osio.o ../priv/obj/i386-apple-darwin9.4.0/esock_utils.o ../priv/obj/i386-apple-darwin9.4.0/esock_posix_str.o ../priv/obj/i386-apple-darwin9.4.0/esock_openssl.o -lutil -ldl -lm /opt/local/lib/libssl.a /opt/local/lib/libcrypto.a Undefined symbols: "_inflateEnd", referenced from: _zlib_stateful_free_ex_data in libcrypto.a(c_zlib.o) _bio_zlib_free in libcrypto.a(c_zlib.o) "_inflateInit_", referenced from: _zlib_stateful_init in libcrypto.a(c_zlib.o) _bio_zlib_read in libcrypto.a(c_zlib.o) "_deflate", referenced from: _zlib_stateful_compress_block in libcrypto.a(c_zlib.o) _bio_zlib_write in libcrypto.a(c_zlib.o) _bio_zlib_ctrl in libcrypto.a(c_zlib.o) "_deflateEnd", referenced from: _zlib_stateful_free_ex_data in libcrypto.a(c_zlib.o) _bio_zlib_free in libcrypto.a(c_zlib.o) "_deflateInit_", referenced from: _zlib_stateful_init in libcrypto.a(c_zlib.o) _bio_zlib_write in libcrypto.a(c_zlib.o) "_zError", referenced from: _bio_zlib_read in libcrypto.a(c_zlib.o) _bio_zlib_write in libcrypto.a(c_zlib.o) _bio_zlib_ctrl in libcrypto.a(c_zlib.o) "_inflate", referenced from: _zlib_stateful_expand_block in libcrypto.a(c_zlib.o) _bio_zlib_read in libcrypto.a(c_zlib.o) ld: symbol(s) not found collect2: ld returned 1 exit status make[4]: *** [../priv/bin/i386-apple-darwin9.4.0/ssl_esock] Error 1 make[3]: *** [opt] Error 2 make[2]: *** [opt] Error 2 make[1]: *** [opt] Error 2 make: *** [libs] Error 2
libzとリンクされてなさそうなので,リンクしてコンパイルしてみる.
$ ./configure --enable-kernel-poll --enable-smp-support --enable-threads --with-ssl=/opt/local CFLAGS='-lz' $ make
成功.インストールする.
$ sudo make install
Erlangを起動してみる.
$ erl Erlang (BEAM) emulator version 5.6.4 [source] [smp:4] [async-threads:0] [kernel-poll:false] Eshell V5.6.4 (abort with ^G) 1>
SMPになっている.メデタシメデタシ.