日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux运行c程序a. out,bash:./a.out:在由ld生成的运行可执行文件上没有这样的文件或目录。...

發布時間:2025/3/21 linux 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux运行c程序a. out,bash:./a.out:在由ld生成的运行可执行文件上没有这样的文件或目录。... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小編典典

其他答案僅涉及如何避免這種情況,而不是 實際發生的問題 。

gcc -c a.c; ld -lc a.o您提供的命令會產生非常明顯的警告:

ld: warning: cannot find entry symbol _start; defaulting to 0000000000400260

因此,即使可以執行該文件,它也可能立即崩潰。 請參閱@EmployedRussian的答案 ,以獲取有關應該執行的操作的說明。

為什么甚至無法執行該問題仍然很有趣:

$ strace ./a.out

execve("./a.out", ["./a.out"], [/* 72 vars */]) = -1 ENOENT (No such file or directory)

execve(2)返回ENOENT,因為它找不到解釋器(我從中找出了解釋器file,依此類推,請參見下文)。從嘗試運行以開頭的文件時,您會得到相同的錯誤

#!/usr/non-existant-path/bin/bash

如您所發現,此錯誤消息的通常原因是在沒有安裝正確的動態鏈接器和動態庫的系統(例如,未安裝32位支持的64位系統)上運行ELF二進制文件時。在您的情況下,這是因為您使用了錯誤的鏈接命令,并使用錯誤的解釋器路徑制作了動態可執行文件。

我在Ubuntu 15.10上,其中GNU file版本5.22報告:

a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib/ld64.so.1, not stripped

/lib/ld64.so.1我的系統上沒有。 ldd輸出令人困惑,因為ldd使用其默認的ELF解釋程序,而不是二進制文件指定的解釋程序。

$ ldd a.out

linux-vdso.so.1 => (0x00007ffc18d2b000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0e0a79f000)

/lib/ld64.so.1 => /lib64/ld-linux-x86-64.so.2 (0x0000559dbc9d2000)

因此ldd,我猜它假設二進制文件中的運行時解釋器已解析為使用過的解釋器。

您的ldd輸出可能也來自舊版本,因為它僅顯示/lib64/ld-

linux-x86-64.so.2該行。對于像這樣的怪異情況,最好不要做出錯誤的猜測,但是這并不能幫助您看到二進制文件具有奇怪的解釋器路徑。

readelf -l a.out

將為您解碼ELF標頭,包括解釋器路徑。(感謝@EmployedRussian的評論指出了這一點。)

2020-06-07

總結

以上是生活随笔為你收集整理的linux运行c程序a. out,bash:./a.out:在由ld生成的运行可执行文件上没有这样的文件或目录。...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。