簡體   English   中英

bash無法執行可執行文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM