Skip to content

LD Failures when building beam as an NDK on Android. #7775

Open
@dexmagic

Description

@dexmagic

Describe the bug
I'm trying to build OTP on Android. At a mimimum I need to build the BEAM vm so compiled Erlang code can be run.
I've got a setup that will successfully compile BEAM, but the linker fails because these symbols are not defined.

To Reproduce
Build BEAM on Android.

Expected behavior
A successful build with just the VM in a library that can be linked into a native Android application.

Affected versions
OTP 26.

Additional context

Here are the errors:
I can't find these symbols in the code, so what should I do about those? Perhaps there's a workaround?

ld: error: undefined symbol: prim_socket_nif_init
  >>> referenced by driver_tab.c
  >>>               CMakeFiles/otp.dir/erts/emulator/x86_64-pc-linux-android/opt/emu/driver_tab.c.o:(erts_static_nif_tab)
  
  ld: error: undefined symbol: erts_pcre_malloc
  >>> referenced by erl_bif_re.c:96 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/beam/erl_bif_re.c:96)
  >>>               CMakeFiles/otp.dir/erts/emulator/beam/erl_bif_re.c.o:(erts_init_bif_re)
  >>> referenced by pcre_compile.c:9437 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/pcre/pcre_compile.c:9437)
  >>>               CMakeFiles/otp.dir/erts/emulator/pcre/pcre_compile.c.o:(erts_pcre_compile2)
  >>> referenced by pcre_compile.c:933 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/pcre/pcre_compile.c:933)
  >>>               CMakeFiles/otp.dir/erts/emulator/pcre/pcre_compile.c.o:(compile_branch)
  >>> referenced 11 more times
  
  ld: error: undefined symbol: erts_pcre_free
  >>> referenced by erl_bif_re.c:97 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/beam/erl_bif_re.c:97)
  >>>               CMakeFiles/otp.dir/erts/emulator/beam/erl_bif_re.c.o:(erts_init_bif_re)
  >>> referenced by erl_bif_re.c:1207 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/beam/erl_bif_re.c:1207)
  >>>               CMakeFiles/otp.dir/erts/emulator/beam/erl_bif_re.c.o:(re_run)
  >>> referenced by erl_bif_re.c:496 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/beam/erl_bif_re.c:496)
  >>>               CMakeFiles/otp.dir/erts/emulator/beam/erl_bif_re.c.o:(build_compile_result)
  >>> referenced 18 more times
  
  ld: error: undefined symbol: erts_pcre_stack_malloc
  >>> referenced by erl_bif_re.c:98 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/beam/erl_bif_re.c:98)
  >>>               CMakeFiles/otp.dir/erts/emulator/beam/erl_bif_re.c.o:(erts_init_bif_re)
  >>> referenced by pcre_exec.c:5271 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/pcre/pcre_exec.c:5271)
  >>>               CMakeFiles/otp.dir/erts/emulator/pcre/pcre_exec.c.o:(match)
  >>> referenced by pcre_exec.c:3677 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/pcre/pcre_exec.c:3677)
  >>>               CMakeFiles/otp.dir/erts/emulator/pcre/pcre_exec.c.o:(match)
  >>> referenced 66 more times
  
  ld: error: undefined symbol: erts_pcre_stack_free
  >>> referenced by erl_bif_re.c:99 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/beam/erl_bif_re.c:99)
  >>>               CMakeFiles/otp.dir/erts/emulator/beam/erl_bif_re.c.o:(erts_init_bif_re)
  >>> referenced by pcre_exec.c:0 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/pcre/pcre_exec.c:0)
  >>>               CMakeFiles/otp.dir/erts/emulator/pcre/pcre_exec.c.o:(erts_pcre_exec)
  >>> referenced by pcre_exec.c:0 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/pcre/pcre_exec.c:0)
  >>>               CMakeFiles/otp.dir/erts/emulator/pcre/pcre_exec.c.o:(erts_pcre_exec)
  >>> referenced 2 more times
  
  ld: error: undefined symbol: erts_pcre_stack_guard
  >>> referenced by erl_bif_re.c:0 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/beam/erl_bif_re.c:0)
  >>>               CMakeFiles/otp.dir/erts/emulator/beam/erl_bif_re.c.o:(erts_init_bif_re)
  >>> referenced by pcre_compile.c:8336 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/pcre/pcre_compile.c:8336)
  >>>               CMakeFiles/otp.dir/erts/emulator/pcre/pcre_compile.c.o:(compile_regex)
  
  ld: error: undefined symbol: esock_atom_name
  >>> referenced by unix_socket_syncio.c:774 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:774)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_info)
  >>> referenced by unix_socket_syncio.c:5108 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:5108)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_ioctl2)
  >>> referenced by prim_net_nif.c:1718 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/common/prim_net_nif.c:1718)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/common/prim_net_nif.c.o:(nif_getifaddrs)
  >>> referenced 1 more times
  
  ld: error: undefined symbol: esock_abort
  >>> referenced by unix_socket_syncio.c:780 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:780)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_info)
  >>> referenced by unix_socket_syncio.c:817 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:817)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced by unix_socket_syncio.c:928 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:928)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced 65 more times
  
  ld: error: undefined symbol: esock_open_is_debug
  >>> referenced by unix_socket_syncio.c:802 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:802)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced by unix_socket_syncio.c:1037 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:1037)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_plain)
  
  ld: error: undefined symbol: esock_open_use_registry
  >>> referenced by unix_socket_syncio.c:803 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:803)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced by unix_socket_syncio.c:1038 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:1038)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_plain)
  
  ld: error: undefined symbol: esock_dbg_printf
  >>> referenced by unix_socket_syncio.c:819 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:819)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced by unix_socket_syncio.c:837 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:837)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced by unix_socket_syncio.c:847 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:847)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced 332 more times
  
  ld: error: undefined symbol: esock_getopt_int
  >>> referenced by unix_socket_syncio.c:953 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:953)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced by unix_socket_syncio.c:982 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:982)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced by unix_socket_syncio.c:953 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:953)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced 2 more times
  
  ld: error: undefined symbol: esock_open_which_protocol
  >>> referenced by unix_socket_syncio.c:855 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:855)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced by unix_socket_syncio.c:855 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:855)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced by unix_socket_syncio.c:1098 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:1098)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_plain)
  
  ld: error: undefined symbol: esock_atom_domain
  >>> referenced by unix_socket_syncio.c:968 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:968)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  
  ld: error: undefined symbol: esock_decode_domain
  >>> referenced by unix_socket_syncio.c:972 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:972)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  
  ld: error: undefined symbol: esock_atom_type
  >>> referenced by unix_socket_syncio.c:997 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:997)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced by unix_socket_syncio.c:5642 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:5642)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(decode_cmsghdrs)
  >>> referenced by unix_socket_syncio.c:6060 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:6060)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_recvmsg)
  >>> referenced 1 more times
  
  ld: error: undefined symbol: esock_decode_type
  >>> referenced by unix_socket_syncio.c:1000 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:1000)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  
  ld: error: undefined symbol: esock_make_invalid
  >>> referenced by unix_socket_syncio.c:0 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:0)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced by unix_socket_syncio.c:0 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:0)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_sendmsg)
  >>> referenced by unix_socket_syncio.c:0 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:0)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_sendmsg)
  >>> referenced 2 more times
  
  ld: error: undefined symbol: esock_atom_protocol
  >>> referenced by unix_socket_syncio.c:1014 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:1014)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced by unix_socket_syncio.c:1014 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:1014)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced by prim_net_nif.c:4502 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/common/prim_net_nif.c:4502)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/common/prim_net_nif.c.o:(nif_getaddrinfo)
  
  ld: error: undefined symbol: esock_extract_int_from_map
  >>> referenced by unix_socket_syncio.c:1013 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:1013)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  >>> referenced by unix_socket_syncio.c:1013 (/Users/richard/Development/git-dexopruntime/erlang-android/otp-android/app/src/main/cpp/erts/emulator/nifs/unix/unix_socket_syncio.c:1013)
  >>>               CMakeFiles/otp.dir/erts/emulator/nifs/unix/unix_socket_syncio.c.o:(essio_open_with_fd)
  

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugIssue is reported as a bughelp wantedIssue not worked on by OTP; help wanted from the communityteam:VMAssigned to OTP team VM

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions