我已經在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庫與我的應用程序
請幫我在這裏
我強烈建議作出*共享庫*的,不是一成不變的。參見http://stackoverflow.com/a/12197285/841108 –
在Linux上,一個.a文件只是一個包含一堆.o文件(已編譯但未鏈接)的便利歸檔文件。它沒有元數據。與.a文件鏈接基本上與單獨鏈接.o文件相同。至於.o文件,.a文件無法指示其外部依賴庫。您需要在構建系統中分別跟蹤並在鏈接時將信息提供給鏈接器。 –
@BasileStarynkevitch:感謝有用的帖子 –