(002)linux開發經驗

2021-10-01 13:43:26 字數 2416 閱讀 9425

1、三種模式:

2、命令模式下:

3、末行模式下:

4、配置檔案

1、gcc編譯的4個階段:

2、gcc的一些其他引數

優化程式(-o0不優化,-o1,-o2,-o3最高優化)

編譯時輸出警告資訊(-wall)

新增除錯資訊(-g),可執行程式會變得稍大一些,便於gdb除錯

1、靜態庫

命名規則:

製作靜態庫:

發布靜態庫:

特點:

靜態庫製作例項:

1、目錄結構

2、在src目錄下製作靜態庫

3、把 lib 和 include 發布給使用者,使用者根據.**件中的內容編寫程式即可

2、動態庫

命名規則:

發布動態庫:

特點:

動態庫製作例項:

1、目錄結構

2、在src目錄下製作動態庫

3、把 lib 和 include 發布給使用者,使用者根據.**件中的內容編寫程式即可

值得注意的是,在執行方法2生成的可執行程式時會出現下面的錯誤

這是因為鏈結不到動態庫的原因。此時通過$ ldd [可執行程式名]來檢視可執行程式在執行時所依賴的所有動態庫

此時可以看到,c標準庫和其他依賴的庫都被找到了,只有我們的cal庫沒有找到。其中,最後一行是動態鏈結器,上面的幾個動態庫都是通過它來載入到應用程式中的,那麼為什麼其他庫都找到了而我們的庫卻沒有找到呢?——環境變數。所以,這個動態鏈結器會根據環境變數裡的value值依次去查詢。

解決方法1:

回想起linux目錄結構中,根目錄下的lib資料夾就是存放基本的動態鏈結庫的,於是可以將我們的動態鏈結庫拷貝到根目錄下的lib目錄中,這就找到了。但這是系統目錄,為防止同名把系統原來的庫給覆蓋,這種方法一般不使用

解決方法2:

使用環境變數ld_library_path,把你的庫所在的路徑指定給這個環境變數,這樣,它會先搜尋這個地方,然後再去搜尋預設的環境變數中的路徑。

但這種方法只是臨時的。那麼如何做到永久呢?——設定到當前使用者的bashrc檔案中($ vim ~/.bashrc)。

在最後一行,加上絕對路徑的匯入export ld_library_path=/home/..../lib,關掉當前終端再開啟即可。

解決方法3(最常用):

首先找根目錄下的etc資料夾內的動態庫的配置檔案($ sudo vim /etc/ld.so.conf),在最後一行直接新增動態庫的目錄,儲存並更新($ sudo ldconfig -v)。

gcc引數加-g生成帶除錯資訊的可執行程式

此外,當出現斷錯誤時,進入gdb直接run,停下的地方就是段錯誤的地方。

1、三要素

目標:依賴(tab)命令意味著執行這個命令,需要上面的依賴(如果不在同一級目錄,要顯式指定),最終生成目標

make即可,上面的依賴檔案都會被編譯。所以當檔案比較多的時候,效率較低。

優化:

002 linux之點燈(彙編深度解析)

1.開發板採用韋山東的開發板 2.晶元cpu三星s3c2440a 3.控制引腳 gpf4 4.linux作業系統 看晶元手冊三星s3c2440a中gpf4的功能 280 p 由下面的晶元手冊可以看出gpf4的功能可以用作普通io的輸入輸出,和外部中斷。下圖 5.io口控制 282 p 由晶元手冊中2...

002 linux 控制台的使用

1.桌面控制台 2.字元控制台 預設6個字元控制台。獨立執行 互不影響 多使用者 多工 tty 控制台的使用 開始進入的是圖形圖面 tty1 就是圖形介面。圖形介面切換到字元介面終端 ctrl alt f2 6 字元終端切換到影象介面 ctrl alt f1 pty 控制台的使用 虛擬終端pty,我...

002 Linux下防火牆相關命令操作

linux的各個版本或同乙個版本間不同版本號關於防火牆命令也會有不一樣的。針對這些命令整理如下,方便自己或有需要的朋友查閱。centos 6.5關閉防火牆步驟 永久關閉防火牆 chkconfig iptables off service iptables status centos7.0預設防火牆為...