LINUX平台下編譯與執行程式

2022-09-09 05:51:11 字數 1458 閱讀 5658

目錄2. 執行應用程式

應用程式編譯注意有以下幾點:

對於復合編譯器的相關選項會有不同。

比如:

config_uclibc_build=y

ifeq ($(config_uclibc_build), y)

cflags += -muclibc

ldflag += -muclibc

endif

ifeq ($(config_uclibc_build), y)

sdk_lib_dir = ../../lib/uclibc

else

sdk_lib_dir = ../../lib/glibc

endif

若是單獨固定的版本,就沒問題。

若是不清楚當前的工具鏈是什麼型別的,可以使用gcc -v命令進行檢視。

具體可看這篇文章

若庫有先後連線順序,寫makefile時要注意。

makefile中則需要這樣寫

libs := $(sdk_lib_dir)/libimp.a $(sdk_lib_dir)/libalog.a
需要使用mips-linux-gnu-g++進行鏈結,

或使用 gcc 鏈結,需要手動新增ld_flags+=stdc++

a. 編譯等級選擇o2:c_flags/cxx_flags += -o2

b. 不鏈結不必要的段。

ccflags += -ffunction-sections -fdata-sections 

ldflags += -wl,--gc-sections

strip = $(cross_compile)strip

$(target): $(target_deps) | $(objdir) $(dumpdir)

$(q)echo "gen $(target)"

$(q)$(cross_compile)gcc $(target_deps) -o $@ $(ldflags) $(libs)

$(q)$(strip) $@

結果對比

#strip 之前

-rwxrwxr-x 1 hany hany 681k nov 24 20:27 out/diamond

#strip 之後

-rwxrwxr-x 1 hany hany 176k nov 24 20:27 out/diamond

若系統中有多個 elf 檔案需要鏈結庫檔案,可使用動態鏈結的方式。

只有乙個檔案鏈結庫檔案,請使用靜態鏈結的方式。

在除錯時選擇動態鏈結的方式可以方便的進行 debug 及 問題反饋。

linux自動執行程式

linux 的啟動指令碼位於 etc init.d rcs 注rcs中 s是大寫字母 vi etc init.d rcs 進入vi後,按i 編輯.移動上下左右鍵到,你想插入的位置,然後打字。這時跟記事本是一樣的。打完字後,按esc 然後輸入 wq 注,第乙個字元是冒號 也要輸入 就儲存退出了。若想自...

Linux後台執行程式

shell command dev null 2 1 最後乙個符號 意思是讓程式在後台執行。dev null 的作用是將標準輸入轉向null,這樣就忽略當前的指令碼標準輸出。2 1 的作用是將標準錯誤連線至標準輸出,也將被忽略。一直不明白1 2的作用。原來!作業系統預設指定3個檔案 0標準輸入 1標...

Linux後台執行程式

在我們平常的時候執行程式的時候會產生很多的資訊,這些資訊有時候有用,有時候沒用,不過這些資料都會在該程式的log中儲存,所以把這些資訊放在前台就不是很好。我們可以將指令碼放在後台執行,不要將這些資訊顯示出來。將shell放入後台執行 比如 指令碼名稱 storm.sh 後台執行 storm.sh 這...