日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

读书笔记---编译程序中的三板斧

發布時間:2025/4/16 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读书笔记---编译程序中的三板斧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
平時安裝軟件安裝多了,總是少不了./confgiure;make;make install 這三條命令
然而,軟件安裝完畢,各位有想過這幾條命令的意義么?
???? 今天早上看書的時候,談到C編譯程序及調試,于是將書中所說總結出來,以供大家分享吧。
???? 通常一個源碼包解壓縮以后,我們ls一下,能看到configure文件,通常這是一個可執行腳本文件。由這個腳本文件加上參數,經過運行,生成Makefile文件和其他的一些必要的文件
???? 如果ls沒有發現configure文件的話,你第一步執行./configure是沒用的。只會得到一條shell返回的錯誤提示。那么沒有configure的程序我們要如何編譯呢,通常我們可以看README和INSTALL文件,里面會提示我們用一些其他的程序來生成configure文件。
比如perl腳本寫的Makefile.pl,可以用perl Makefile.pl來生成Makefile。
????? 有些程序在執行之前可能需要打上補丁,通常可以找到一些patch文件,
常用 patch -p1 < filename.patch的方法給源碼打上補丁。

???? configrue的開始基本上都是檢查編譯環境,如gcc編譯器的位置,各種庫和頭文件的位置等等。當檢測遇到錯誤就會停下來。并輸出錯誤信息。對于redhat,建議在安裝系統的時候就把開發工具等都全部選中,這樣避免編譯的時候臨時去安裝需要的編譯工具和一些缺少的庫。
???? 有時候我們的系統少一些其他的庫,是導致我們編譯失敗的原因。默認情況下,我們都是運行make來調用系統工具對C代碼進行編譯。對于某些軟件,make后面的參數很長,也比較復雜,這些參數都是什么意思呢。
用postfix舉例吧
make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH -I/usr/local/include/sasl' 'AUXLIBS=-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm -L/usr/local/lib -lsasl2'
? 這一大串輸入起來是不是很費勁。分別解釋一下吧
-I路徑?? 表示在指定路徑搜索頭文件
-lz??????? 表示搜索libz.so或者libz.a,這里用了縮寫的形式,只寫了一個z,同理lmysqlclient就表示libmysqlclient.so/libmysqlclient.a
CCARGS表示宏。用于替換makefile中的默認值

make的過程中會生成很多中間文件*.o,最后連接成為可執行文件。make一般時間比較長,取決于CPU的性能了。

接下來一般就是make install了,可是為什么是install參數呢,可以man make看一下,你會發現并沒有install這個參數,那么這個參數是哪里來的呢

如果你還沒有刪除剛才的文件,你可以用編輯器打開Makefile看一下。這里么定義了很多目標字段,格式如下
targert: prerequisite-list
TAB construction-commands
這里的TAB表示一個制表符號,也就是幾個像空格一樣的空白。
用查找命令從最后找一下,你能找到install開頭的目標字段,如果你熟悉程序,你會發現,安裝的動作就是從這里開始的。

默認情況下make后面沒有指定字段,就從第一個字段開始。當make完成后,我們再次執行make命令是沒有效果的,會提示你沒有什么可以執行了。因此我們指定一個程序中定義的字段install,來執行特定的安裝動作。

對于某些小程序來說,make可能直接就完成了編譯和安裝的動作,而有些程序是用make
all來完成的。對于一些大型軟件,make install之后還可以執行make install-config來安裝配置文件等等。現在你明白為啥是make install而不是make love了吧。哈哈
編譯失敗,需要清理代碼樹,通常我們用make clean或者make distclean,毫無疑問,這兩個參數也是在Makefile中定義好了
如果Makefile中定義了uninstall參數,那么該程序還能卸載。

?????? 就到此為止吧。對于編譯還有一些其他的開關,有興趣可以看看相關的開發的書。


??



本文出自 “風吹云動” 博客,請務必保留此出處[url]http://coolerfeng.blog.51cto.com/133059/88161[/url]本文出自 51CTO.COM技術博客

轉載于:https://blog.51cto.com/betterliu/98759

總結

以上是生活随笔為你收集整理的读书笔记---编译程序中的三板斧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。