c編譯成可執行檔案在linux上執行

2021-10-17 03:16:13 字數 2055 閱讀 3652

平台是ubuntu20.04。

還是那個超級簡單的例子,在android上的編譯和執行可看之前文章:c交叉編譯成可執行檔案在android上執行

因為突然想到android那篇忘記涉及到執行c程式時傳命令列引數這部分,又想到linux和android上的c程式編譯和執行又並不完全一樣,故而有了這篇。

實驗步驟:

新建資料夾hello:

建立hello.c和makefile。

test@test-vostro-

3268:~

/wahaha/hello$ ls

makefile hello.c

hello.c內容:

#include

intmain

(int argc,

char

* ar**)

//argc是命令列執行時輸入的引數個數,ar**是引數字串陣列,ar**[0]是應用名稱

printf

("hello world\n");

printf

("goodbye\n");

return0;

}

makefile內容:

hello: hello.o

default

: gcc -c hello.c

gcc -o hello hello.o

clean:

rm hello hello.o

install:

sudo cp hello /sbin

編譯時的輸出:

(如果不sudo make install,則呼叫該程式時,需要在~/wahaha/hello下的終端裡輸入./hello test 123才可執行)

test@test-vostro-

3268:~

/wahaha/hello$ make

cc -c -o hello.o hello.c

cc hello.o -o hello

test@test-vostro-

3268:~

/wahaha/hello$ make clean

rm hello hello.o

test@test-vostro-

3268:~

/wahaha/hello$ make

cc -c -o hello.o hello.c

cc hello.o -o hello

test@test-vostro-

3268:~

/wahaha/hello$ sudo make install

[sudo] password for test:

sudo cp hello /sbin

test@test-vostro-

3268:~

/wahaha/hello$

執行效果:

//只要cp到了/sbin中,任何資料夾位置的終端裡均可呼叫該程式。

test@test-vostro-

3268:~

/wahaha$ hello test 123

argc=

3ar**[1]

= hello

ar**[2]

= test

ar**[3]

=123

hello world

goodbye

test@test-vostro-

3268:~

/wahaha$

在android平台上的命令列傳參也是同樣的,第乙個int變數是引數個數,第二個是引數陣列。這樣就可以在main函式裡對命令列引數進行利用了。

關於這部分具體實現的原理,之後會抽時間單寫一篇原始碼分析。

ps:注意一下生成出來的可執行檔案hello的許可權,可ls-l hello檢視。如果沒有執行的許可權,會報錯permission denied。這時候只需要chmod 777 hello即可。

Linux中將c檔案編譯成可執行檔案的方法

c檔案 project.c 方法一 預編譯,生成已編譯通過的c原始程式 i gcc e project.c o project.i 編譯,生成組合語言原始程式 s gcc s project.i o project.s 鏈結,生成可執行程式 gcc o project.exe project.s 方...

Linux中將c檔案編譯成可執行檔案的方法

c檔案 project.c 方法一 預編譯,生成已編譯通過的c原始程式 i gcc e project.c o project.i 編譯,生成組合語言原始程式 s gcc s project.i o project.s 鏈結,生成可執行程式 gcc o project.exe project.s 方...

Linux如何原始檔逐步編譯成可執行檔案

首先先上圖對編譯的整個過程有個感性的認識,然後再逐步分析各個過程。以hello.c 程式為例 乙個.c源程式需要經過預處理器生成.i檔案,再經過編譯器生成.s檔案,再經過彙編器生成可重定位目標檔案.o檔案,再與其他.o檔案經過鏈結器生成最終的可執行目標程式。1,預處理階段。主要是處理原始檔中以 開頭...