首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lubuntu没有看到ocamlopt在NixOS上生成的可执行文件。

lubuntu没有看到ocamlopt在NixOS上生成的可执行文件。
EN

Stack Overflow用户
提问于 2020-05-28 07:56:16
回答 1查看 71关注 0票数 0

我使用带有选项-linkall的"ocamlopt“本机编译器在NixOS (x86_64)中创建了可执行文件”独立的x86_64“。生成的程序在NixOS中执行。到目前一切尚好

之后,我尝试在Lubuntu下执行这个文件。

代码语言:javascript
复制
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

但收到:

代码语言:javascript
复制
lubuntu@lubuntu:~/Documents$ ./a.out 
bash: ./a.out: No such file or directory

我确信建筑是合适的:

代码语言:javascript
复制
lubuntu@lubuntu:~/Documents$ objdump -h a.out

a.out:     file format elf64-x86-64

我做错了什么?NixOS,OCaml,Lubuntu?

Tnx预付

UDP:我的NixOS发行版:

代码语言:javascript
复制
$> uname -a
Linux cat 4.19.36 #1-NixOS SMP Sat Apr 20 07:16:05 UTC 2019 x86_64 GNU/Linux

奥卡姆:

代码语言:javascript
复制
$> ocamlopt -v                                                                                         
The OCaml native-code compiler, version 4.06.1   

UDP2:

代码语言:javascript
复制
$> readelf -a a.out | grep ld-
      [Requesting program interpreter: /nix/store/681354n3k44r8z90m35hm8945vsp95h1-glibc-2.27/lib/ld-linux-x86-64.so.2]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-28 08:13:23

当尝试执行一个确实存在的文件时,“没有这样的文件或目录”(ENOENT)通常意味着它的动态链接器路径(ELF解释器)不存在。因为执行以#!/non-existant/path开头的文本文件的相同原因,这是完全相同的错误

使用strace ./a.out查看唯一的系统调用是失败的execve

大多数GNU/Linux发行版都使用/lib64/ld-linux-x86-64.so.2。例如,我的Arch /Linux桌面上的file /bin/ls显示:

BuildIDsha1=4fef2dc9762eb7d4593f402a65cc02bb3d4c48de,/

/bin/ls: ELF 64位LSB饼可执行文件,x86-64,version 1 (SYSV),动态链接,解释器/LSB 64/ld-Linux-x86-64.so.2, for GNU/Linux 3.2.0

据推测,NixOS,或者至少是ocamlopt on NixOS,使用的是不同的路径。使用file检查。(或者显示ELF程序头的readelf -a也会转储解释器路径。)

ldd也可以显示解释器路径,但是如果路径无效,则IIRC失败。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62059693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档