Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error on dynamically loaded library: dlllwt_unix_stubs.so #664

Closed
rom38 opened this issue Feb 19, 2019 · 9 comments
Closed

Error on dynamically loaded library: dlllwt_unix_stubs.so #664

rom38 opened this issue Feb 19, 2019 · 9 comments

Comments

@rom38
Copy link

rom38 commented Feb 19, 2019

Than i try install utop on android termux. I get the following:

$ opam install utop
The following actions will be performed:
  ∗ install utop 2.3.0

<><> Gathering sources ><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
[utop.2.3.0] found in cache

<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><><><>
[ERROR] The compilation of utop failed at
        "/data/data/com.termux/files/home/.opam/4.06.1+termux/bin/dune build -p utop -j 7".

#=== ERROR while compiling utop.2.3.0 =========================================#
# context     2.0.1 | linux/arm64 |  | https://opam.ocaml.org#6cfd4ce2
# path        ~/.opam/4.06.1+termux/.opam-switch/build/utop.2.3.0
# command     ~/.opam/4.06.1+termux/bin/dune build -p utop -j 7
# exit-code   1
# env-file    ~/.opam/log/utop-4465-05296d.env
# output-file ~/.opam/log/utop-4465-05296d.out
### output ###
#       ocamlc src/top/utop.bc (exit 2)
# (cd _build/default && /data/data/com.termux/files/home/.opam/4.06.1+termux/bin/ocamlc.opt -w -40 -safe-string -g -o src/top/utop.bc -linkall -I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/bisect_ppx/runtime -I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/bytes -I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/camomile -I /data/data/com.termux/files/home/.opa[...]
# File "_none_", line 1:
# Error: Error on dynamically loaded library: /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/stublibs/dlllwt_unix_stubs.so: dlopen failed: cannot locate symbol "socket_type_table" referenced by "/data/data/com.termux/files/home/.opam/4.06.1+termux/lib/stublibs/dlllwt_unix_stubs.so"...



<><> Error report <><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
┌─ The following actions failed
│ λ build utop 2.3.0
└─
╶─ No changes have been performed

$ cat ~/.opam/log/utop-5746-05296d.out
      ocamlc src/top/utop.bc (exit 2)
(cd _build/default && /data/data/com.termux/files/home/.opam/4.06.1+termux/bin/ocamlc.opt -w -40 -safe-string -g -o src/top/utop.bc -linkall
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/bisect_ppx/runtime
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/bytes 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/camomile 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/camomile/default_config 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/camomile/dyn 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/camomile/lib_default 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/camomile/library 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/findlib 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/lambda-term 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/lwt 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/lwt/unix 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/lwt_log 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/lwt_log/core 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/lwt_react 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/ocaml/compiler-libs 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/ocaml/threads
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/react 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/result 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/seq 
-I /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/zed 
-I src/lib
/data/data/com.termux/files/home/.opam/4.06.1+termux/lib/ocaml/compiler-libs/ocamlcommon.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/ocaml/compiler-libs/ocamlbytecomp.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/ocaml/compiler-libs/ocamltoplevel.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/findlib/findlib.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/findlib/findlib_top.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/ocaml/unix.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/bisect_ppx/runtime/bisect.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/result/result.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/seq/seq.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/lwt/lwt.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/ocaml/bigarray.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/ocaml/threads/threads.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/lwt/unix/lwt_unix.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/react/react.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/lwt_react/lwt_react.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/camomile/default_config/camomileDefaultConfig.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/camomile/library/camomileLibrary.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/camomile/lib_default/camomileLibraryDefault.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/camomile/dyn/camomileLibraryDyn.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/camomile/camomile_yuge.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/zed/zed.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/lwt_log/core/lwt_log_core.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/lwt_log/lwt_log.cma /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/lambda-term/lambda_term.cma src/lib/uTop.cma src/top/.utop.eobjs/byte/utop.cmo)
File "_none_", line 1:
Error: Error on dynamically loaded library: /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/stublibs/dlllwt_unix_stubs.so: dlopen failed: cannot locate symbol "socket_type_table" referenced by "/data/data/com.termux/files/home/.opam/4.06.1+termux/lib/stublibs/dlllwt_unix_stubs.so"...

readelf -s /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/stublibs/dlllwt_unix_stubs.so|grep so
    14: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND socket_type_table
    15: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND getsockopt@LIBC (2)
    77: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND alloc_sockaddr
    96: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND getsockname@LIBC (2)
   125: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND get_sockaddr
   128: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND setsockopt@LIBC (2)
   148: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND socket_domain_table
   172: 000000000000ae54    20 FUNC    GLOBAL DEFAULT   10 lwt_unix_is_socket
   215: 000000000000ab54   112 FUNC    GLOBAL DEFAULT   10 socket_domain
   321: 000000000000ae7c    20 FUNC    GLOBAL DEFAULT   10 lwt_unix_socketpair_stub
    38: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS crtbegin_so.c
  1603: 0000000000000000     0 FILE    LOCAL  DEFAULT  ABS windows_is_socket.c
  1621: 0000000000020510     8 OBJECT  LOCAL  DEFAULT   17 __dso_handle
  1651: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND socket_type_table
  1652: 000000000000ab54   112 FUNC    GLOBAL DEFAULT   10 socket_domain
  1657: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND getsockopt@@LIBC
  1789: 000000000000ae54    20 FUNC    GLOBAL DEFAULT   10 lwt_unix_is_socket
  1798: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND alloc_sockaddr
  1841: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND getsockname@@LIBC
  1844: 000000000000ae7c    20 FUNC    GLOBAL DEFAULT   10 lwt_unix_socketpair_stub
  1902: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND get_sockaddr
  1907: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND setsockopt@@LIBC
  1955: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND socket_domain_table
nm -D /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/stublibs/dlllwt_unix_stubs.so|grep so
                 U alloc_sockaddr
                 U get_sockaddr
                 U getsockname
                 U getsockopt
000000000000ae54 T lwt_unix_is_socket
000000000000ae7c T lwt_unix_socketpair_stub
                 U setsockopt
000000000000ab54 T socket_domain
                 U socket_domain_table
                 U socket_type_table

In linux ubuntu 18.06 and in windows 7 cygwin all OK

When I do simple thing, I get following:

$ touch x.ml

$ ocamlfind ocamlc -linkpkg  -package lwt.unix x.ml
ocamlfind: [WARNING] Package `threads': Linking problems may arise because of the missing -thread or -vmthread switch
File "x.ml", line 1:
Error: Error on dynamically loaded library: /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/stublibs/dlllwt_unix_stubs.so: dlopen failed: cannot locate symbol "socket_type_table" referenced by "/data/data/com.termux/files/home/.opam/4.06.1+termux/lib/stublibs/dlllwt_unix_stubs.so"...
$
$ ocamlfind ocamlc -linkpkg  -linkall -package lwt.unix x.ml
ocamlfind: [WARNING] Package `threads': Linking problems may arise because of the missing -thread or -vmthread switch
File "x.ml", line 1:
Error: Required module `Condition' is unavailable
$ ocamlfind ocamlc -linkpkg  -linkall -thread -package lwt.unix x.ml
File "x.ml", line 1:
Error: Error on dynamically loaded library: /data/data/com.termux/files/home/.opam/4.06.1+termux/lib/stublibs/dlllwt_unix_stubs.so: dlopen failed: cannot locate symbol "socket_type_table" referenced by "/data/data/com.termux/files/home/.opam/4.06.1+termux/lib/stublibs/dlllwt_unix_stubs.so"...
$

Looking at the Lwt code, there indeed seems to be an inconsistency between the .c and .h files regarding socket_type_table and defined(LWT_ON_WINDOWS) in file src/unix/lwt_unix_stubs.c

What can i do?
And what the symbol "socket_type_table"? I can not find it in linux shared libraries in /system/lib/.

@aantron
Copy link
Collaborator

aantron commented Feb 19, 2019

Try creating this file, has_sockets.c:

#include <stdio.h>
#include <caml/s.h>

int main()
{
    printf("%i\n", HAS_SOCKETS);
    return 0;
}

then

ocamlfind opt has_sockets.c
cc has_sockets.o
./a.out

What output does it print?

@rom38
Copy link
Author

rom38 commented Feb 19, 2019

Thanks for help. I think this problem is related with

android/ndk#201

and

coq/coq#6020

and need some changes in make files

I find symbol "socket_type_table" in shared library /lib/ocaml/unix.cmxs
And this library is not loaded on Android. Need flag to compiler for link like -cclib or -lunix.cmxs

@rom38
Copy link
Author

rom38 commented Feb 20, 2019

$ cat has_sockets.c 
#include <stdio.h>
#include <caml/s.h>                                                                                                                                               int main()                                                                       {                                                                                            printf("%i\n", HAS_SOCKETS);                                                         return 0;
}
$ cat $(find ../.opam/ -name s.h)|grep HAS_SOCKETS
#define HAS_SOCKETS
$ ocamlfind opt has_sockets.c
has_sockets.c:6:32: error: expected expression                                               printf("%i\n", HAS_SOCKETS);                                                                               ^                                          1 error generated.                                                               $

@rom38
Copy link
Author

rom38 commented Feb 20, 2019

cat has_sockets.c
#include <stdio.h>                          #include <caml/s.h>

int main()
{
            printf("%i\n",HAS_GETHOSTBYNAME_
R);
                return 0;
}
$ ocamlfind opt has_sockets.c
$ cc has_sockets.o
$ ./a.out
6

@aantron
Copy link
Collaborator

aantron commented Feb 20, 2019

What about this?

#include <stdio.h>

extern int socket_type_table[];

int main()
{
    printf("%i\n", socket_type_table[1]);
    return 0;
}

then

ocamlfind opt -linkpkg -package unix has_sockets.c

Making sure this is on termux, of course.

@aantron
Copy link
Collaborator

aantron commented Feb 20, 2019

And please let me know if you are making progress using the other issues or not.

@rom38
Copy link
Author

rom38 commented Feb 21, 2019

$ cat has_socket2.c
#include <stdio.h>

 extern int socket_type_table[];

 int main()
{
            printf("%i\n", socket_type_table[1]);
                return 0;
}
$ ocamlfind opt -linkpkg -package unix has_socket2.c
$

@aantron
Copy link
Collaborator

aantron commented Apr 3, 2019

Closing for now; please reopen if there is more information.

@ELLIOTTCABLE
Copy link

I'm seeing this as well; but I'm on macOS, and not using termux.

Full log from the above suggestions on my machine:

https://gist.github.com/ELLIOTTCABLE/dec074c9946cd94b194ee46fa9046ca4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants