MacでErlangをコンパイル

MacPortsErlangに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になっている.メデタシメデタシ.