Skip to content

dlopen cannot locate symbol "lwt_unix_not_available; cannot locate symbol "caml_unix_cloexec_default #1051

Open
@KoviRobi

Description

I have encountered an issue on Android similar to #664 that stops UTop from being able to open (I have a workaround)

neofetch system details
❯ neofetch --stdout
u0_a345@localhost
-----------------
OS: Android 11 aarch64
Host: Lenovo Lenovo L79031
Kernel: 4.19.136-perf+
Uptime: 6 days, 9 hours, 29 mins
Packages: 468 (dpkg), 1 (pkg)
Shell: zsh 5.9
Resolution: 2192x996
WM: i3
Terminal: tmux
CPU: Qualcomm KONA (8) @ 1.804GHz
Memory: 6534MiB / 15733MiB

I have put my notes to get OCaml working on my Android/termux at https://gist.github.com/KoviRobi/9361a808c5543e57b68d531553269dba -- see https://gist.github.com/KoviRobi/9361a808c5543e57b68d531553269dba#file-04-utop-build-md for the LWT patch I applied.

But including it here for ease:

I can install utop via opam fine, but when I try to run it, I get

utop
Fatal error: cannot load shared library dlllwt_unix_stubs
Reason: dlopen failed: cannot locate symbol "caml_unix_cloexec_default" referenced by "/data/data/com.termux/files/home/pdev/ocaml/.install/share/opam/default/lib/stublibs/dlllwt_unix_stubs.so"...

Some minor grep pointed me towards

patchelf --add-needed $OPAMROOT/default/lib/ocaml/stublibs/dllunixnat.so \
  $OPAMROOT/default/lib/stublibs/dlllwt_unix_stubs.so

Which then needed me to

utop
Fatal error: cannot load shared library dlllambda_term_stubs
Reason: dlopen failed: cannot locate symbol "lwt_unix_not_available" referenced by "/data/data/com.termux/files/home/pdev/ocaml/.install/share/opam/default/lib/stublibs/dlllambda_term_stubs.so"...

so I did

patchelf --add-needed $OPAMROOT/default/lib/stublibs/dlllwt_unix_stubs.so \
  $OPAMROOT/default/lib/stublibs/dlllambda_term_stubs.so

And now I have a working utop! But I feel like there's a much better fix to this, i.e.at build time of dlllwt_unix_stubs/dlllambda_term_stubs there's a linker flag missing that would add those NEEDED entries, rather than having to patch it up after. I just don't know enough about the OCaml ecosystem/LWT build steps to know what.

Hopefully there's an easy fix, if not, it's work-aroundable, and perhaps this/my gist for building OCaml on Android will help other Android users.

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions