[英]linking library for creating static library
我在Lib_file.h和Lib_file.cpp中編寫了一些代碼。 我希望將此代碼轉換為靜態庫。 我能夠編譯代碼(使用命令g++ -I <necessary include files> -o Lib_file.o Lib_file.cpp
)來獲取Lib_file.o。 我還可以使用ar rvs Lib_file.a Lib_file.o
命令將其添加到存檔。 現在,當我嘗試使用-L選項在其他代碼中使用此庫時,我得到未定義的引用錯誤。 這個錯誤指向我的Lib_file.o中的代碼。 所以我的問題是如何讓我的Lib_file.cpp中的代碼鏈接到它使用的庫。
到目前為止,我嘗試了以下選項
I.創建Lib_file.o后,我嘗試了以下命令g++ -L<include path> -l<.a files> Lib_file.o
。 執行此命令時,出現以下錯誤
/usr/lib/../lib64/crt1.o: In function `_start': init.c:(.text+0x20): undefined reference to `main' collect2: ld returned 1 exit status
II。 我嘗試使用ar命令將所有必需的.a文件與我的Lib_file.o一起包含在新存檔中。 當我嘗試在我的應用程序中使用Lib_file.a庫時,仍然會收到未定義的引用錯誤
請幫幫我
首先,所有庫通常都命名為libxyz.a
,其中xyz
是庫的名稱。
其次,您嘗試僅使用用於庫的目標文件創建程序,並將其與自身鏈接。 這當然行不通,因為該庫沒有正常程序所需的main
功能。 您必須創建另一個程序,並將該程序與庫鏈接。
喜歡
gcc myotherprogram.c -o myotherprogram -L/some/path -lxyz
正如您在上面的命令行中看到的那樣,我將庫放在命令行的最后 。 這是必需的,因為鏈接器以相反的順序尋找依賴關系。
編輯:將靜態庫與其他庫鏈接:您沒有。 靜態庫是完全獨立的,如果它需要其他庫本身才能工作,那么在編譯實際程序時它們必須出現在命令行中。
例如,假設庫xyz
依賴於標准數學庫(即m
庫)。 在創建xyz
庫時,您不能“鏈接”它,因為您實際上沒有鏈接靜態庫,您只需將一組目標文件放在一個存檔中( ar
和.a
擴展名用於存檔)。 當您構建需要xyz
庫的實際應用程序時,您還需要鏈接xyz
需要的任何庫:
gcc myotherprogram.c -o myotherprogram -L/some/path -lxyz -lm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.