Unigine Heaven on Pi 4: Symbol `dlopen` not found The Linux-native build of [Unigine Heaven](https://benchmark.unigine.com/heaven) tries to call `dlopen`, which seems to fail due to a lack of implementation rather than the target library not being found: ``` ~/Downloads/Unigine_Heaven-4.0/bin $ ./heaven_x64 Dynarec for ARM64, with extension: ASIMD CRC32 PageSize:4096 Box64 with Dynarec v0.1.7 23bbab1 built on Mar 2 2022 16:16:12 Using default BOX64_LD_LIBRARY_PATH: ./:lib/:lib64/:x86_64/:bin64/:libs64/ Using default BOX64_PATH: ./:bin/ Counted 37 Env var Env[00]: SHELL=/bin/bash Env[01]: LANGUAGE=en_US.UTF-8 Env[05]: NO_AT_BRIDGE=1 Env[06]: PWD=/home/pi/Downloads/Unigine_Heaven-4.0/bin Env[07]: LOGNAME=pi Env[08]: XDG_SESSION_TYPE=tty Env[09]: MOTD_SHOWN=pam Env[10]: HOME=/home/pi Env[12]: LANG=en_US.UTF-8 Env[13]: LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36: Env[14]: SSH_CONNECTION=192.168.8.187 57040 192.168.8.209 22 Env[15]: XDG_SESSION_CLASS=user Env[17]: TERM=xterm-256color Env[18]: USER=pi Env[19]: SHLVL=1 Env[22]: XDG_SESSION_ID=28 Env[23]: XDG_RUNTIME_DIR=/run/user/1000 Env[25]: SSH_CLIENT=192.168.8.187 57040 22 Env[27]: LC_ALL=en_US.UTF-8 Env[28]: PATH=/home/pi/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games Env[29]: DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus Env[30]: SSH_TTY=/dev/pts/0 Env[32]: TEXTDOMAIN=Linux-PAM Env[33]: OLDPWD=/home/pi/Downloads/Unigine_Heaven-4.0 Env[34]: BOX64_PATH=.:bin Env[35]: BOX64_LD_LIBRARY_PATH=.:lib:lib64 Env[36]: _=/usr/local/bin/box64 Looking for ./heaven_x64 Using emulated libUnigine_x64.so Using emulated /lib/x86_64-linux-gnu/libstdc++.so.6 Using native(wrapped) libm.so.6 Using emulated /lib/x86_64-linux-gnu/libgcc_s.so.1 Using native(wrapped) libc.so.6 Using native(wrapped) ld-linux-x86-64.so.2 Using native(wrapped) libpthread.so.0 Using native(wrapped) librt.so.1 Using native(wrapped) libX11.so.6 Using native(wrapped) libXext.so.6 Using native(wrapped) libxcb.so.1 Using native(wrapped) libXau.so.6 Using native(wrapped) libXdmcp.so.6 Using native(wrapped) libXrandr.so.2 Using native(wrapped) libXrender.so.1 Using native(wrapped) libXinerama.so.1 Error: PltResolver: Symbol dlopen(ver 0: dlopen) not found, cannot apply R_X86_64_JUMP_SLOT 0x7f96105198 (0x7f954242c6) in libUnigine_x64.so ``` This is the output when trying to run the benchmark binary directly, but the exact same behavior can be observed when trying to run via the launcher (which itself runs fine using the provided script after changing the `uname -m` call to test for `aarch64`). All libraries live under `bin` with the exception of `libopenal.so`, which I've explicitly copied there from the `x64` subdirectory. Fiddling around with `LD_LIBRARY_PATH` and `BOX64_LD_LIBRARY_PATH` doesn't change things, but library loading in general seems to work fine as I can see stuff from `libUnigine_x64.so` being called. That said, I don't know *what* it wants to `dlopen`, increasing logging verbosity didn't help in figuring that out. ``` ~/Downloads/Unigine_Heaven-4.0/bin $ file libUnigine_x64.so libUnigine_x64.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=64948444abf66110631540b6f560901b5ce3634d, stripped ~/Downloads/Unigine_Heaven-4.0/bin $ file heaven_x64 heaven_x64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.18, BuildID[sha1]=1f868f35c960179f0adae80ede5c869693df024a, stripped ~/Downloads/Unigine_Heaven-4.0/bin $ ldd heaven_x64 not a dynamic executable ``` I'm testing on a Raspberry Pi 4 running the official 64-bit Raspberry Pi OS: ``` $ uname -rm 5.10.92-v8+ aarch64 ```