Failing to link with libei.a in OTP build 24.2

Luke Bakken luke@REDACTED
Wed Jan 12 16:15:16 CET 2022


Hi Serge,

I could try to reproduce (and maybe fix) this using my Arch
environment if you'd like to provide source code I could compile.

Thanks -
Luke

On Wed, Jan 12, 2022 at 5:56 AM Serge Aleynikov <serge@REDACTED> wrote:
>
> I am using Arch Linux and have the latest OTP 24.2 installed.  When trying to build a project that depends on libei.a I am getting undefined references of "ei_*" functions.  This doesn't happen when I download and build erlang OTP from sources.  Investigating this issue shows that the 24.2 Erlang/OTP package included in Arch distribution has libei.a built with LTO
>
> $ nm /usr/lib/erlang/lib/erl_interface-5.1/lib/libei.a | head -10
> /usr/bin/nm: ei_connect.o: plugin needed to handle lto object
>
> ei_connect.o:
> 0000000000000001 C __gnu_lto_slim
>
> ei_resolve.o:
> 0000000000000001 C __gnu_lto_slim
>
> eirecv.o:
> 0000000000000001 C __gnu_lto_slim
>
>
> whereas the manually built one doesn't seem to use LTO:
>
> $ nm /opt/sw/erlang/24.2/lib/erlang/lib/erl_interface-5.1/lib/libei.a | head -10
>
> ei_connect.o:
>                 U clock
>                 U close
>                 U __ctype_b_loc
> 0000000000000140 t dyn_gethostbyname_r
> 00000000000048f0 T ei_accept
>                 U ei_accept_ctx_t__
> 0000000000003560 T ei_accept_tmo
> 0000000000003430 T ei_close_connection
>
>
> What's the correct linking options when building projects using libei.a in OTP 24.2? Adding "-flto" flag doesn't seem to help:


More information about the erlang-questions mailing list