basho / eleveldb

Erlang LevelDB API
262 stars 176 forks source link

Compilation failed eleveldb.cc in RHEL 6.5 32 bit OS [JIRA: RIAK-2627] #197

Closed get4gopim closed 8 years ago

get4gopim commented 8 years ago

I am trying to build riak-2.1.4 on RHEL 6.5 32 bit OS. I have installed the erlang by following the steps mentioned in the below riak link: http://docs.basho.com/riak/kv/2.1.4/setup/installing/source/erlang/#installing-on-rhel-centos

I am using the right version of Erlang, which is mentioned in Riak installation page.

`[root@server123 riak-2.1.4]# erl --version Erlang R16B02_basho8 (erts-5.10.3) [source] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V5.10.3 (abort with ^G)`

I have tried using different version of RHEL 6 32, but all are failing.

Error when I do: make rel

gmake[1]: Leaving directory/opt/Avaya/releases/basho/riak-2.1.4/deps/eleveldb/c_src/leveldb' Compiling /opt/Avaya/releases/basho/riak-2.1.4/deps/eleveldb/c_src/eleveldb.cc /opt/Avaya/releases/basho/riak-2.1.4/deps/eleveldb/c_src/eleveldb.cc: In function ‘ERL_NIF_TERM parse_initoption(ErlNifEnv, ERL_NIF_TERM, EleveldbOptions&)’: /opt/Avaya/releases/basho/riak-2.1.4/deps/eleveldb/c_src/eleveldb.cc:246: error: invalid conversion from ‘sizet’ to ‘long unsigned int_’ /opt/Avaya/releases/basho/riak-2.1.4/deps/eleveldb/c_src/eleveldb.cc:246: error: initializing argument 3 of ‘int enif_getulong(ErlNifEnv, ERL_NIFTERM, long unsigned int)’ /opt/Avaya/releases/basho/riak-2.1.4/deps/eleveldb/c_src/eleveldb.cc: In function ‘ERL_NIF_TERM parse_openoption(ErlNifEnv, ERL_NIF_TERM, leveldb::Options&)’: /opt/Avaya/releases/basho/riak-2.1.4/deps/eleveldb/c_src/eleveldb.cc:334: error: invalid conversion from ‘sizet’ to ‘long unsigned int_’ /opt/Avaya/releases/basho/riak-2.1.4/deps/eleveldb/c_src/eleveldb.cc:334: error: initializing argument 3 of ‘int enif_getulong(ErlNifEnv, ERL_NIFTERM, long unsigned int)’ /opt/Avaya/releases/basho/riak-2.1.4/deps/eleveldb/c_src/eleveldb.cc: In function ‘ERL_NIF_TERM eleveldb::asyncopen(ErlNifEnv, int, const ERL_NIFTERM)’: /opt/Avaya/releases/basho/riak-2.1.4/deps/eleveldb/c_src/eleveldb.cc:593: warning: integer overflow in expression ERROR: compile failed while processing /opt/Avaya/releases/basho/riak-2.1.4/deps/eleveldb: rebar_abort make: *\ [compile] Error 1`

matthewvon commented 8 years ago

Basho dropped all 32 bit support for Riak (and therefore eleveldb) 3, maybe 4, years ago. I have not performed a 32bit compile since then. That said, this is something easy.

The errors you are seeing are from Erlang's erl_nif.h being slightly inconsistent between 32 bit and 64 bit options and the size_t type. You can address lines 246 and 334 by either changing memory_sz to unsigned long or changing the call to enif_get_int().

Line 593 could likely be addressed by changing the "L" suffix to "ULL" or "LL".

get4gopim commented 8 years ago

Thank you. Better we can stop using Riak installation in 32 bit OS.