導航:首頁 > 程序命令 > lib命令

lib命令

發布時間:2023-10-31 12:13:10

① Cmake命令之find_library介紹

  該命令用於查找庫(動態庫或者靜態庫),當構建依賴於第三方庫/系統庫,可以使用該命令來查找並使用庫(Cmake中有另外一個命令 find_package ,能獲取庫的更多信息,具體可以參考 Cmake命令之find_package介紹 )

  通過一個例子來看下基本的使用,假設我們目錄和文件樹如下,:

  我們在 mylib 中生成最終的庫 libmymath.a ,然後在頂層的 CMakeLists.txt 中查找這個庫文件,幾個文件的具體內容如下:

  在 ./mylib/ 下執行 cmake . 和 make 以便生成庫 libmymath.a ,然後在 ./ 目錄下執行 cmake . 和 make ,得到可執行文件 test ,運行 test 的結果為:

  庫的搜索路徑分為兩大類: 默認搜索路徑 和 附加搜索路徑 。
   默認搜索 路徑包含 cmake 定義的以 CMAKE 開頭的一些變數(例如 CMAKE_LIBRARY_ARCHITECTURE 、 CMAKE_PREFIX_PATH 、 CMAKE_LIBRARY_PATH 、 CMAKE_FRAMEWORK_PATH )、標準的系統環境變數(例如系統環境變數 LIB 和 PATH 定義的路徑)、系統的默認的庫安裝路徑(例如 /usr 、 /usr/lib 等);
   附加搜索路徑 即 find_library 命令中通過 HINTS 或 PATHS 指定的路徑;

 1) 通過命令行使用 -D 指定的 CMAKE_XXX_PATH 變數,也就是形如 cmake . -DCMAKE_XXX_PATH=paths 的格式。其中 CMAKE_XXX_PATH 包含如下幾個:
   CMAKE_PREFIX_PATH :指定搜索目錄的前綴,如果前綴有多個,需要以 分號分割的列表 方式提供,該變數默認為空,一旦該變數非空,那麼會搜索該變數提供的目錄,以及 ${CMAKE_PREFIX_PATH}/lib ;例如 CMAKE_PREFIX_PATH=A;B ,那麼 find_library 會從 A 、 B 以及 A/lib 、 B/lib 中搜索庫是否存在;
   CMAKE_LIBRARY_ARCHITECTURE :如果該變數被設置,那麼會搜索目錄 ${CMAKE_PREFIX_PATH}/lib/${CMAKE_LIBRARY_ARCHITECTURE} ;
   CMAKE_LIBRARY_PATH :指定 find_library 的庫查找目錄,默認值為空,多個值時需要以分號分割列表指定;
   CMAKE_FRAMEWORK_PATH *:指定 macOS 的框架作為搜索路徑。

 2) 通過在 環境變數 中指定 CMAKE_XXX_PATH 變數,例如在 window 的環境變數中增加 CMAKE_XXX_PATH (以 ; 分割多個路徑)、 Linux 中 shell 配置文件中添加(以 : 分割多個路徑)。用法和 cmake -D 指定類似,例如在我的機器中( macOS ),在 .zshrc (我的命令行配置文件)中增加 export CMAKE_LIBRARY_PATH="/XXX/……/mylib" ,即可在將該目錄加入到搜索路徑中。
 3) HINTS 選項指定的路徑。
 4) 系統環境變數指定的目錄,默認是 LIB 和 PATH 指定的路徑。例如在 PATH 中指定庫搜索目錄;

 也可以通過 find_library 中的 PATHS ENV 環境變數名稱 ( cmake 中使用環境變數名稱的格式為 $ENV{環境變數名稱} )來指定從哪個環境變數名稱中獲取路徑,例如定義一個 TESTPATH 環境變數並賦值為 ./mylib ,並在 find_library 命令中指定使用該環境變數:

 5)跟當前系統相關的平台文件路徑,一般來說指的是當前系統安裝軟體的標准目錄,不同的操作系統對應的路徑有所不同。 camke 中 find_library 與此相關的也有如下幾個, CMAKE_SYSTEM_XXX_PATH 變數,這些:
   CMAKE_SYSTEM_PREFIX_PATH :指定安裝目錄的前綴,例如在 Windows 下的 /XXXX/Program Files , Linux 下的 /usr 或 /usr/local 等。 find_library 命令會搜索這些前綴目錄,也會以這些目錄加上 lib 進行搜索,例如搜索 /usr/local/lib ;
   CMAKE_SYSTEM_LIBRARY_PATH :默認是當前系統的標准目錄,不建議修改它;例如在我的系統,這個變數的值是 /usr/lib/X11 ;
   CMAKE_SYSTEM_FRAMEWORK_PATH : macOS 框架路徑,默認是當前系統的標准目錄,不建議修改它;例如在我的系統,這個變數的值包含了路徑 /Library/Frameworks ;
 6) PATHS 選項指定的路徑。

② 在TC中,怎樣用命令編譯lib庫

定義函數庫的方法及應用:
一、2個相關的命令
1、TCC——TC的DOS下的命令行編譯連接工具
2、TLIB——TC的DOS下的庫操作工具
二、1個自定義的函數庫的例子
1、
在TC集成環境下,編一個文件USERADD.C
#define
_NO_MAIN
int
add(int
*a,int
*b)
{
int
c;
c=(*a)+(*b);
return
c;
}
按ALT—F9編譯
生成一個
USERADD.OBJ文件。
2、按F10—F—O
退到DOSSHELL(DOS環境下)
COPY
USERADD.OBJ

..\LIB目錄,在\LIB目錄下執行
TLIB
USERLIB.LIB+USERADD.OBJ
就生成了一個自己的函數庫
USERLIB,在這個函數庫里就包含了函數模塊
int
add(int
*a,int
*b)
的二進制代碼。現在已經將自定義的函數放進了函數庫,就可以把原文件USERADD.C刪掉不要了。(當然,為了以後維護方便,還是作一個備份為好)。
以後如有其它的函數模塊,也可以編譯後用TLIB
命令加入到這個函數庫里。
3、寫一個包含文件
USER1.H,寫完後COPY到INCLUDE
目錄。內容如下:
int
add(int
*,int
*);
4、作好了以上的自定義函數庫的准備工作,現在就可以使用了。
寫一個程序,取名為ADD-1.C,在程序中調用庫函數add(
);
#include
#include
void
main(
)
{
int
a,b,c;
a=20;b=30;
c=add(&a,&b);
printf(「%d」,c);
}
5、在DOS命令行下,執行
TCC
ADD-1.C
..\LIB\USERLIB.LIB
就OK!
運行ADD-1.EXE,可以看到輸出結果
50
Tc生成lib的方法:
擴展庫與自建LIB庫使用擴展庫TC所帶的庫在有的情況下是無法滿足功能要求的,自己寫一個太麻煩,找到了一個LIB庫又怕不會用。在WIN-TC中,對於使用外部的擴展庫(第三方LIB)提供了一個方便的解決方法:首先要確定你的LIB庫是FOR
TC版本的而不是FOR
VC或是其它的。如果確定是FOR
TC的版本的話就把你的首標文件(或稱頭文件),就是擴展名為*.h的文件拷貝到WIN-TC的include目錄里,然後把相應名稱的*.lib文件拷貝到lib目錄,然後再運行WIN-TC時選擇「編譯配置」菜單項,你會看到擴展庫信息欄目里有你的LIB庫文件名在上面了,但是沒有打鉤。然後你把它鉤選後再「確定」保存,以後的編譯程序時就自動鏈接該擴展庫了。自建立LIB庫將自己的代碼編譯成LIB庫的格式有利與保護自己的代碼版權。如何來生成自己的LIB庫呢?請按照下面的方法:
STEP
1——生成目標代碼(OBJ)
建立mylib的代碼文件/*********************
mylib.c
*********************/void
myfun(){printf("
myfun()
in
mylib.lib
");}然後保存為WIN-TC目錄下的mylib.c文件然後到菜單項:運行->編譯設置
看看「產生
OBJ
文件」是否已選擇,若未選擇則選擇之。然後回到主界面,點「編譯鏈接」按鈕(F9
查看原帖>>

閱讀全文

與lib命令相關的資料

熱點內容
怎樣刪除手機內不用的英文文件夾 瀏覽:81
android獲得屏幕寬度 瀏覽:302
單片機根據波形寫代碼 瀏覽:669
應屆生程序員怎麼投簡歷 瀏覽:721
數學建模演算法與應用ppt 瀏覽:99
遠程怎麼訪問端游伺服器 瀏覽:106
打電話定位置的源碼 瀏覽:642
即時通訊平台源碼 瀏覽:457
安卓自助app怎麼轉到蘋果手機 瀏覽:328
雅馬哈迴音壁不能識別源碼 瀏覽:730
python如何移植到安卓 瀏覽:29
黃柱選股公式源碼 瀏覽:639
教育系統源碼達標 瀏覽:887
音效卡驅動安裝程序在哪個文件夾 瀏覽:60
錢還完了銀行不給解壓 瀏覽:170
linux的系統調用表 瀏覽:752
php怎麼轉換頁面 瀏覽:547
我的世界買了伺服器之後怎麼開服 瀏覽:829
r1234yf汽車空調壓縮機 瀏覽:147
ftp伺服器地址欄 瀏覽:902