I am trying to install expostal in a new Elixir project in a container with alpine, and since libpostal exists as a package on alpine, I am just installing it.
❯ docker run --rm -it elixir:alpine sh
/ # apk add build-base libpostal-dev
/ # mix new foobar
# Add {:expostal, "~> 0.2.0"} to the deps.
/foobar # mix deps.get
/foobar # mix deps.compile
/foobar # iex -S mix
iex(1)> Expostal.par(TAB)
13:18:25.440 [warning] The on_load function for module Elixir.Expostal returned:
{{:badmatch,
{:error,
{:load_failed,
'Failed to load NIF library: \'Error relocating /foobar/_build/dev/lib/expostal/priv/expostal.so: libpostal_setup_parser: symbol not found\''}}},
[
{Expostal, :init, 0, [file: 'lib/expostal.ex', line: 13]},
{:code_server, :"-handle_on_load/5-fun-0-", 1,
[file: 'code_server.erl', line: 1317]}
]}
13:18:25.439 [error] Process #PID<0.202.0> raised an exception
** (MatchError) no match of right hand side value: {:error, {:load_failed, 'Failed to load NIF library: \'Error relocating /foobar/_build/dev/lib/expostal/priv/expostal.so: libpostal_setup_parser: symbol not found\''}}
(expostal 0.2.0) lib/expostal.ex:13: Expostal.init/0
(kernel 8.5) code_server.erl:1317: anonymous fn/1 in :code_server.handle_on_load/5
I’ve asked this on Elixir Slack and @LostKobraKai had suggested that the NIF compilation is the problem and I should compile it properly. However I am not sure how I would compile it properly so that it’d work on alpine.
Compiling from source and installing on ubuntu:latest
and alpine:latest
just worked fine. So it means there’s something with the expostal I think.