linux環境下 gcc 編譯器的簡單使用


gcc 編譯器:

               1.gcc 編譯的四個階段:預處理,編譯,彙編,鏈接;

               2.gcc 支持的後綴名: 

                   .C /.cc / ./cpp   C++源程序;

                   .m                    Objective-C原始程序;

                   .i                       經過預處理的C原始程序;

                   .ii                      經過預處理的C++原始程序;

                   .s  /.S                彙編語言源程序;

                   .o                      目標文件;

                   .a/.so                 編譯後的庫文件;

                   

               3、gcc -Wall  文件名,   編譯時儘可能的提供警告;

               4、 gcc -O2  文件名,    編譯時儘可能進行優化,產生儘可能小的和執行儘可能快的代碼;

               5、靜態庫: 在編譯時,直接將庫函數的代碼加到可執行文件中,在以後執行過程中,不在依賴該庫文件;

                          命名方式:lib + 庫名+.a  (如: libstd.a)

                     動態庫 和動態加載庫: 在編譯時不用加入代碼,在運行時裝載和卸載;

                           命名方式:lib + 庫名 + .so + .版本號 (如libc.a.so.9)


               6、創建靜態庫:

                        gcc -c  c文件1  c文件2(生成.o文件)

                        ar -cr 庫名稱 目標文件1 目標文件2(.o文件)

                   

               7、靜態庫的使用:

                        gcc -o 生成名稱 c文件  -l庫命名(如lm 表示連接的庫爲libm.a 或者libm.so;)  -L/路徑

                        由於靜態庫不能先於源程序連接,所以連接庫(-l庫名稱) 都卸載最後;

           

               8、創建共享庫:

                       gcc -c -fPIC test.c

                       gcc -c -fPIC text2.c

                       gcc -shared -fPIC -o libtest.so test.o test2.o


                9、/lib : 系統必備共享函數庫;

                      /usr/lib: 標準共享函數庫和靜態函數庫;

                     /usr/local/lib: 本地函數庫;

            

                10、在更新了共享庫之後,要使用ldconfig命令,告知系統;

                

                11、ldd      用於查看庫函數之間的依賴性;


                12、在程序中使用指針(空類型) = dlopen(“路徑”,連接方式(flag))調用連接庫,使用完後使用dlclose(指針)關閉該庫;該函數在<dlfcn.h>頭文件中;

         

                13、gcc -c 1.c 2.c 存在的意義:

                        如果要編譯的文件非常多,但是在編譯完成之後修改了某個文件,那麼只需在將整個文件再重新編譯成.o文件,然後再連接一下就可以了,這個就節省了大量的時間。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章