簡體   English   中英

鏈接庫以創建靜態庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM