我是Linux新手。我正在尝试将我的c程序编译成elf文件,因此我可以使用read elf来查找有关该函数的信息等。每当我尝试将readelf与输出文件一起使用时(在编译我的c程序之后),它就说它不是elf文件。那么如何编译我的C程序,以便编译成一个elf文件。或许我不理解?我正在使用gcc编译
这是我的编译命令行:
gcc -Wall main.c a.out
然后readelf -a a
好的,所以我使用gcc -o test -Wall main.c编译它并且编译没有错误然后使用readelf -a测试进行readelf,它仍然说它不是精灵,当我提交它时提出:PE32 +可执行(控制台)x86-64,用于MS Windows,所以这里有什么?
答案 0 :(得分:4)
让我们试一试:
gcc -Wall test.c a.out
gcc: error: a.out: No such file or directory
强烈暗示出现了问题......所以gcc
没有生成任何a.out
文件(如果a.out
文件已存在,则传递它就像这样告诉gcc尝试编译它,因为它不是一个有效的text / c文件,你会得到a.out: file not recognized: File truncated
并且它也会很糟糕地结束。
您需要使用-o
开关指定可执行输出(如果您在unix / linux上需要a.out
,只需不要键入它)
gcc -Wall test.c
如果没有找到编译错误,将创建a.out
可执行文件(.elf)。
gcc -o myexe -Wall test.c
允许更改可执行文件名。
编辑:你不运行Linux但是Cygwin(在 Windows 上)。这并不能使上面的答案无效,但Cygwin正在创建本机 windows 可执行文件,而不是.elf
文件。你不能使用.elf
创建gcc
文件(除非你得到一个windows - > Linux交叉编译器,如果存在的话)
readelf
命令,但不会读取使用gcc
编译的程序。它可以使用该可执行格式分析来自Linux或其他系统的.elf
文件,但肯定不是Windows PE格式。