[英]bash unable to execute the executable file
我正在嘗試使用make實用程序在Linux上編譯c程序,如果我嘗試創建.o文件,會發生什么情況
#make size_of.o
cc -c -o size_of.o size_of.c
編譯過程正確運行,但是當我執行可執行文件時,出現此錯誤
#./size_of.o
bash: ./size_of.o: cannot execute binary file
然后我再次運行不帶.o后綴的make
#make size_of
cc size_of.o -o size_of
編譯和執行過程按預期運行。
該程序有問題嗎?或者您能告訴我什么地方出了問題嗎? 如何解決此問題,C中的可執行文件之間有什么不同?
這個程序:
#include <stdio.h>
int main (void){
printf("char %d bytes\n",sizeof(char));
printf("short %d bytes\n",sizeof(short));
printf("int %d bytes\n",sizeof(int));
printf("long %d bytes\n",sizeof(long));
printf("float %d bytes\n",sizeof(float));
printf("double %d bytes\n",sizeof(double));
printf("long double %d bytes\n",sizeof(long double));
return 0;
}
這是輸出:
char 1 bytes
short 2 bytes
int 4 bytes
long 4 bytes
float 4 bytes
double 8 bytes
long double 12 bytes
.o
文件是目標文件,而不是可執行文件。 您已明確告訴編譯器僅創建目標文件,因為您使用了-c
標志。 您無需運行目標文件,它們會饋入鏈接器(以及其他內容)以創建可執行文件。
通用(簡化)過程是:
Phase
-----
+---------+
| main.c | (source)
+---------+
|
Compile........|............................
|
V
+---------+ +-----------+
| main.o | (object) | libs etc. |
+---------+ +-----------+
| |
Link...........|.........................|....
| |
+-------------------------+
|
V
+---------+
| main | (executable)
+---------+
您可以通過將對象文件轉換為可執行文件來解決此問題,就像稍后在該過程中所做的那樣,盡管我可以這樣做:
cc -o size_of size_of.o
或者直接從源文件直接創建可執行文件:
cc -o size_of size_of.c
而且,如果您使用的是make
,請確保您有一個實際的Makefile
。 否則,您將獲得默認規則,而這些規則可能不是您想要的。 它可能很簡單:
size_of: size_of.c Makefile
gcc -o size_of size_of.c
在第一個make調用中,您將make target設置為目標文件(target的擴展名為.o)。 目標文件的內置生成規則只是編譯和組裝它們(不鏈接),這就是您獲得目標文件的原因。
第二次調用實際上是要求make生成可執行文件。
Gnumake具有一組針對不同目標的內置規則。 請查看此鏈接以獲取詳細信息:
https://www.gnu.org/software/make/manual/html_node/Catalogue-of-Rules.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.