在大公司上班,系統中的模組都有明確的分工,一直以來也只是熟悉自己負責的那一點點東西,感覺就是井底之蛙。
所以希望自己能夠靜下心來,學一點,多學一點。
本篇作為乙個學習的起點,先學習如何編譯和執行乙個可執行檔案。
測試**如下:
#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系統呼叫核心處理函...