鏈結選項 I, l, L, Wl rpath

2021-08-02 22:00:25 字數 1471 閱讀 7827

首先這幾個命令一般用在gcc/g++或makefile中,但是一般的ide裡也會涉及。只是在ide裡的配置方式會不同,有的是配置檔案如qtcreator,有的是圖形化介面,如codeblocks。無論是什麼樣的方式其本質都是一樣的,尤其是配乙個工程的時候,這些都是必不可少的。

-i,新增包含路徑

-i 在編譯時用,告訴編譯器去哪個路徑下找檔案

如:-i /home/hello/include

表示將/home/hello/include目錄作為第乙個尋找標頭檔案的目錄。

編譯器的尋找順序是:/home/hello/include-->/usr/include-->/usr/local/include。如果在/home/hello/include中有個檔案hello.h,則在程式中用#include就能引用到這個檔案。

可以加多個包含路徑,編譯器的尋找順序為新增的順序。

-l,新增引用鏈結庫

告訴鏈結器(linker),程式需要鏈結pthread這個庫,這裡的pthread是庫名不是檔名,具體來說檔案句是libpthread.so。

-l,新增鏈結庫路徑

-l 後跟路徑,告訴鏈結器從哪找庫(.so檔案),只有在鏈結時會用到。

如:-l /home/hello/lib

表示將/home/hello/lib目錄作為第乙個尋找庫檔案的目錄,尋找順序是:/home/hello/lib-->/usr/lib-->/usr/local/lib。

可以加多個包含路徑,鏈結器的尋找順序為新增的順序。

-wl:rpath,新增執行時庫路徑

-wl:rpath 後面也是路徑,執行的時候用。這條編譯指令會在編譯時記錄到target檔案中,所以編譯之後的target檔案在執行時會按這裡給出的路徑去找庫檔案。

如:-wl:rpath=/home/hello/lib

表示將/home/hello/lib目錄作為程式執行時第乙個尋找庫檔案的目錄,程式尋找順序是:/home/hello/lib-->/usr/lib-->/usr/local/lib。

可以加多個包含路徑,程式在執行時的尋找順序為新增的順序。

一開始我認為編譯路徑和執行路徑應該是一樣的才對,為什麼要分兩個?實際上在配置工程的時候為了標準化,編譯出的target(.so或是可執行檔案)不一定跟原始檔(main.cpp,xx.cpp)放在乙個資料夾下。如不在乙個資料夾下,在編譯時,-l後面跟的是相對於原始檔的路徑,-wl:rpath後面跟的是相對於target(.so或是可執行檔案)的路徑,確切來說是相對於工作目錄的路徑。qtcreator的工作路徑就是target檔案的路徑,codebloks的工作路徑是.cbp檔案的路徑。所以不同的ide在配置有時候會一些細微不同,這些不同一不注意就會有大坑。

估計codeblocks在找可執行檔案時是用../../這種方式過去的,這樣就能在.cbp的檔案路徑下執行可執行檔案。如果用cd會改變工作路徑。

鏈結選項 I, l, L, Wl rpath

首先這幾個命令一般用在gcc g 或makefile中,但是一般的ide裡也會涉及。只是在ide裡的配置方式會不同,有的是配置檔案如qtcreator,有的是圖形化介面,如codeblocks。無論是什麼樣的方式其本質都是一樣的,尤其是配乙個工程的時候,這些都是必不可少的。i,新增包含路徑 i 在編...

Visual C 鏈結器選項

visual c 鏈結器選項 鏈結器選項 link 是將通用物件檔案格式 coff 物件檔案和庫鏈結起來以建立可執行 exe 檔案或動態鏈結庫 dll 的工具。下表是 link.exe 選項的綜合列表。本節還包含關於以下主題的資訊 可以通過 comment 雜注指定一些鏈結器選項。選項 用途 指定響...

MKL鏈結選項問題

最近用下mkl,看了下文件,沒看見mkl鏈結的選項。關於mkl的鏈結選型,可以通過如下檢視 icc help如下圖 可知 mkl就行,至於標頭檔案的話,可以去看mkl的文件,在原始檔新增了,以上是icc icpc的編譯器,因此利用使用mkl的步驟如下 1.原始檔新增mkl相應的標頭檔案 2.編譯 i...