今天的課堂檢測一共有五項,分別是vi測試、gcc測試、gdb測試、靜態庫的測試、共享庫的測試。由於自己的學習不到位,導致有最後兩個沒有完成,特別在此加以補做。
對之前完成的三個檢測,我學到了一些新知識:
gcc *.c
:將當前資料夾裡的所有.c 檔案進行整體編譯,編譯後的檔名預設為a.out
1. 除了main.c外,其他4個模組(add.c sub.c mul.c div.c)的源**不想給別人,如何製作乙個mymath.a靜態庫?main.c如何使用mymath.a?
2. 提交靜態庫生成和呼叫過程截圖,要全屏,包含自己的學號資訊
step 1:建立靜態庫:linux> gcc -c addvec.c multvec.c
linux> ar rcs libvector.a addvec.o multvec.o
對這兩行命令的理解我也是通過scdn部落格中一篇名為《linux命令之ar - 建立靜態庫.a檔案》中找到了比較詳盡的解釋:
使用gcc -c ···.c ···.c ···.c
把要將建立的靜態庫所包含的.c檔案編譯為.o檔案。
使用ar rcs ···.a ···.o ···.o ···.o
由以上編譯出來的.o檔案建立靜態庫。(在我自己的操作中根據題意命名為mymath)
step 2 :建立可執行檔案(即在在程式中使用靜態庫)
因為是靜態編譯,生成的執行檔案可以獨立於.a檔案執行。
gcc -c main.c
gcc -static -o ··· main.o ./···.a
通過以上的兩行命令將建立的.a檔案鏈結到main.o上,建立出乙個可直接執行的檔案(在我自己的操作中命名為prog4c)
自己動手操作後的結果:
2. 動態庫測試:
1. 除了main.c外,其他4個模組(add.c sub.c mul.c div.c)的源**不想給別人,如何製作乙個mymath.so共享庫?main.c如何使用mymath.so?
2. 提交共享庫生成和呼叫過程截圖,要全屏,包含自己的學號資訊
step 1:建立動態庫:linux> gcc -shared -fpic -o libvector.so addvec.c multvec.c
對這行命令的理解:使用gcc -shared -fpic -o ···.so ···.c ···.c
建立了乙個共享的目標檔案。
step 2 :建立可執行檔案(即在在程式中使用動態庫)
linux> gcc -o prog21 main2.c ./libvector.so
使用gcc -o ··· main.c ./···
建立了乙個可執行的檔案(在我自己的操作中命名為prog4s)
自己動手操作後的結果:
step 1:
step 2:
對於makefile我的腦海中可以說是一片空白,什麼都不知道,多虧我們生長在乙個技術發達、知識大**的年代,通過查詢ruglcc的部落格我知道了
第一:makefile的
makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更複雜的功能操作,因為makefile就像乙個shell指令碼一樣,其中也可以執行作業系統的命令。makefile帶來的好處就是——「自動化編譯」,一旦寫好,只需要乙個make命令,整個工程完全自動編譯,極大的提高了軟體開發的效率。
1.如果這個工程沒有編譯過,那麼我們的所有c檔案都要編譯並被鏈結。
2.如果這個工程的某幾個c檔案被修改,那麼我們只編譯被修改的c檔案,並鏈結目標程式。
3.如果這個工程的標頭檔案被改變了,那麼我們需要編譯引用了這幾個標頭檔案的c檔案,並鏈結目標程式。
流程:
利用vim編寫makefile:
使用make將編寫好的檔案進行編譯
執行編譯好的檔案(5334test)
**託管連線
**託管連線
感想:通過這次的補交作業讓我真真切切的體會到了實踐出真知的道理,面對之前毫無頭緒的問題,怨天尤人是無濟於事的,只有腳踏實地的去一步一步的操作,一點點的查漏補缺才能真正的掌握它。
3月27日 題解
基本思路就模擬整個過程,每次進行兩兩比較,贏得一分,輸了的就不管。sort其實就是快速排序,而快速排序其實就是二分的思想 穩定的話o nlogn 左右。但是仔細想想此題 每次需要更新的值,都是相鄰兩個人變化後的分數 而相鄰的分數,有些是不會改變位置的,而快速排序則是每次全部修改,必然會造成浪費。雖然...
11月27日總結
函式 返回值 描述 abs x 返回數字的絕對值,如abs 10 返回 10 ceil x 返回數字的上入整數,如math.ceil 4.1 返回 5 cmp x,y 如果 x y 返回 1,如果 x y 返回 0,如果 x y 返回 1。python 3 已廢棄,使用 x y x exp x 返回...
10月27日總結
pandas 提供了多種將 series dataframe 物件組合在一起的功能,用索引與關聯代數功能的多種設定邏輯可執行連線 join 與合併 merge 操作。詳見合併 opens new window concat opens new window 用於連線 pandas 物件 in 73 ...