linux編譯和執行乙個可執行檔案初學篇

2021-09-01 19:56:36 字數 1057 閱讀 2561

在大公司上班,系統中的模組都有明確的分工,一直以來也只是熟悉自己負責的那一點點東西,感覺就是井底之蛙。

所以希望自己能夠靜下心來,學一點,多學一點。

本篇作為乙個學習的起點,先學習如何編譯和執行乙個可執行檔案。

測試**如下:

#include

int main(int argc, char* argv)

{int i = 0;

for (;i

編譯main.c這個原始檔,生成main程式。

[~]$ gcc -o main main.c

[~]$ ls -l ./main

-rwxr-xr-x 1 root root 8518 jan 1 00:02 ./main

[~]$ file main

main: elf 64-bit lsb executable, x86-64, version 1(sysv), dynamically linked(uses shared libs), for gnu/linux 2.6.15, not stripped

接下來執行程式,將程式放到後台執行

[~]$ ./main argv1 argv2 &

[1] 20060

argv[0]=./main

argv[1]=argv1

argv[2]=argv2

[~]$ ps | grep main

20060 pts/8 00:00:00 main

[~]$ jobs

[1]+ running ./main argv1 argv2 &

以上我們可以看到程式執行一切正常。

可是當我們將main程式放到另乙個linux系統中執行的時候,卻無法執行,

sh-# ldd ./main

not a dynamic executable

sh-# ./main

sh: ./main: cannot execute binary file

問題:為什麼在另乙個linux系統上main程式不是乙個動態可執行檔案?

如何才能讓程式能夠在另乙個linux系統上執行起來呢?

linux 如何執行乙個可執行檔案

本文只為整理思路,供自己日後參考。現在就從從乙個執行檔案a.out的執行開始,自上而下地分析linux是如何執行乙個執行檔案的。1 首先,需要了解一下a.out這個目標檔案。a.out在linux下是elf executable linkable format 檔案格式,該目標檔案由乙個檔案頭 段 ...

編譯 可執行格式,誰執行?

鏈結完成之後,會生成可執行格式的檔案。常見可執行格式有exe和elf。這些可執行格式一般依賴於動態共享庫,由作業系統載入並替換符號,然後執行。換言之,exe elf格式的可執行檔案,由作業系統執行,即執行流程的起點是作業系統。然而這並不是軟體執行的起點,軟體執行的起點是系統上電後,cpu讀取並執行的...

Linux核心如何裝載和啟動乙個可執行程式

linux核心如何裝載和啟動乙個可執行程式 沙雨濟一 實驗目的 理解編譯鏈結的過程和elf可執行檔案格式 程式設計使用exec 庫函式載入乙個可執行檔案,動態鏈結分為可執行程式裝載時動態鏈結和執行時動態鏈結,程式設計練習動態鏈結庫的這兩種使用方式 使用gdb跟蹤分析乙個execve系統呼叫核心處理函...