如何将c程序编译成elf格式?

use*_*795 -2 c linux elf

我是 Linux 新手。我正在尝试将我的 c 程序编译成一个 elf 文件,以便我可以使用 read elf 来查找有关该函数等的信息。每当我尝试将 readelf 与输出文件一起使用时(在编译我的 c 程序之后),它说它不是一个 elf 文件。那么我如何编译我的 C 程序以便它编译成一个 elf 文件。或者我不明白?我正在使用 gcc 进行编译

这是我用于编译的命令行:

gcc -Wall main.c  a.out
Run Code Online (Sandbox Code Playgroud)

然后 readelf -aa

好的,所以我用 gcc -o test -Wall main.c 编译它,它编译没有错误,然后用: readelf -a test 做了 readelf ,它仍然说它不是一个精灵,当我做文件时它会出现:PE32+ 可执行文件(控制台)x86-64,适用于 MS Windows,这是怎么回事?

Jea*_*bre 5

让我们试试看:

gcc -Wall test.c a.out
gcc: error: a.out: No such file or directory
Run Code Online (Sandbox Code Playgroud)

这是一个强烈暗示出了问题......所以gcc不会产生任何a.out文件(如果a.out文件已经存在,像这样传递它会告诉 gcc 尝试编译它,因为它不是一个有效的 text/c 文件,你会得到a.out: file not recognized: File truncated,它也会很糟糕地结束)。

你需要用-oswitch指定可执行输出(如果你需要a.out在 unix/linux 上,不要输入它)

gcc -Wall test.c
Run Code Online (Sandbox Code Playgroud)

a.out如果没有发现编译错误,将创建可执行文件 (.elf)。

gcc -o myexe -Wall test.c
Run Code Online (Sandbox Code Playgroud)

允许更改可执行文件名称。

编辑:您运行的不是Linux,而是 Cygwin(在Windows 上)。这并不会使上面的答案无效,但 Cygwin 正在创建本机Windows可执行文件,而不是.elf文件。你不能.elf使用gcc那里创建文件(除非你有一个 windows -> Linux 交叉编译器,如果它存在的话)

readelf命令存在于 Cygwin 发行版中,但不会读取使用gcc. 它可以.elf使用该可执行格式分析来自 Linux 或其他系统的文件,但肯定不是 Windows PE 格式。