【歸檔】gcc&g++命令中參數-l和-L

轉載自:gcc -l參數和-L參數

# Eg.
$ gcc test.c -o run -lglfw.3.2 -framework OpenGL

-l 參數就是用來指定程序要鏈接的庫,-l 參數緊接着就是庫名(中間沒有空格),那麼庫名跟真正的庫文件名有什麼關係呢?就拿數學庫來說,他的庫名是m,他的庫文件名是libm.so,很容易看出,把庫文件名的頭lib和尾.so去掉就是庫名了。

Mac中的第三方庫的名字是以 .dylib 結尾的

如:libglfw.3.2.dylib

好了現在我們知道怎麼得到庫名,當我們自已要用到一個第三方提供的庫名字libtest.so,那麼我們只要把libtest.so拷貝到/usr/lib裏,編譯時加上-ltest參數,我們就能用上libtest.so庫了(當然要用libtest.so庫裏的函數,我們還需要與libtest.so配套的頭文件)

放在 /lib/usr/lib/usr/local/lib 裏的庫直接用 -l參數就能鏈接了,但如果庫文件沒放在這三個目錄裏,而是放在其他目錄裏,這時我們只用 -l 參數的話,鏈接還是會出錯,出錯信息大概是:/usr/bin/ld: cannot find -lxxx,也就是鏈接程序ld在那3個目錄裏找不到 libxxx.so ,這時另外一個參數 -L 就派上用場了,比如常用的X11的庫,它在 /usr/X11R6/lib 目錄下,我們編譯時就要用 -L/usr/X11R6/lib -lX11 參數, -L 參數跟着的是庫文件所在的目錄名。再比如我們把 libtest.so 放在 /aaa/bbb/ccc 目錄下,那鏈接參數就是 -L/aaa/bbb/ccc -ltest

-include和-I參數

-include 用來包含頭文件,但一般情況下包含頭文件都在源碼裏用 #include xxxxxx 實現, -include 參數很少用。 -I 參數是用來指定頭文件目錄, /usr/include 目錄一般是不用指定的,gcc知道去那裏找,但是如果頭文件不在 /usr/include 裏我們就要用 -I 參數指定了,比如頭文件放在 /myinclude 目錄裏,那編譯命令行就要加上 -I/myinclude 參數了,如果不加你會得到一個 xxxx.h: No such file or directory 的錯誤。 -I 參數可以用相對路徑,比如頭文件在當前目錄,可以用 -I. 來指定。

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