ocamlopt”和选项-linkall在NixOS(x86_64)中i创建了可执行文件“ standalone””文件。并且生成的程序在NixOS中执行。到目前为止很好
之后,我试图在Lubuntu下执行此文件
lubuntu@lubuntu:~/Documents$ uname -a
Linux lubuntu 4.18.0-10-generic #11-Ubuntu SMP Thu Oct 11 15:13:55 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
但已收到:
lubuntu@lubuntu:~/Documents$ ./a.out
bash: ./a.out: No such file or directory
我很确定该体系结构是合适的:
lubuntu@lubuntu:~/Documents$ objdump -h a.out
a.out: file format elf64-x86-64
我做错了什么?在NixOS,OCaml,Lubuntu上?
提前Tnx
UDP:我的NixOS发行版:
$> uname -a
Linux cat 4.19.36 #1-NixOS SMP Sat Apr 20 07:16:05 UTC 2019 x86_64 GNU/Linux
ocaml:
$> ocamlopt -v
The OCaml native-code compiler, version 4.06.1
“没有这样的文件或目录”(ENOENT
)当试图执行一个确实存在的文件时,通常意味着其动态链接器路径(ELF解释器)不存在。由于出于相同的原因,执行从#!/non-existant/path
使用strace ./a.out
查看唯一的系统调用是失败的execve
。
大多数GNU / Linux发行版使用/lib64/ld-linux-x86-64.so.2
。例如,我的Arch GNU / Linux桌面上的file /bin/ls
显示:
/ bin / ls:ELF 64位LSB饼状可执行文件,x86-64,版本1(SYSV),动态链接,解释器/lib64/ld-linux-x86-64.so.2,BuildID [sha1] = 4fef2dc9762eb7d4593f402a65cc02bb3d4c48de,用于GNU / Linux3.2.0,已剥离
大概是NixOS,或者至少是NixOS上的ocamlopt
,使用不同的路径。用file
检查。 (或显示ELF程序头的readelf -a
也将转储解释器路径。)
[ldd
也可以显示解释器路径,但是如果路径无效,则IIRC会失败。