lubuntu在NixOS上看不到ocamlopt生成的可执行文件

问题描述 投票:0回答:1
使用本机编译器“

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   

UDP2:

$> readelf -a a.out | grep ld-
      [Requesting program interpreter: /nix/store/681354n3k44r8z90m35hm8945vsp95h1-glibc-2.27/lib/ld-linux-x86-64.so.2]
ocaml x86-64 executable nixos
1个回答
2
投票

“没有这样的文件或目录”(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会失败。

© www.soinside.com 2019 - 2024. All rights reserved.