目錄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 這...