2013-06-18 33 views
-1

只是一個簡單的問題,我相信這個論壇上的人很容易回答。在C++中創建一個靜態庫,新手

我該如何去創建一個靜態庫,我相信它是一個DLL(但我很可能是錯的:S),在C++中。 我剛剛開始使用C++,但是我很擔心將函數移動到每個新程序,所以我該如何去製作一個每次可以引用的庫?

感謝您給予的任何幫助,我真的很感激。

+2

DLL不會是靜態的,它將是動態的。靜態鏈接庫和動態鏈接庫稍有不同。如果您澄清您的問題,我很樂意提供幫助。 – ChrisCM

+2

你使用什麼編譯器? – ZioN

+2

DLL代表動態鏈接庫。在這些情況下「動態」通常意味着「在運行時」。它幾乎與靜態庫相反,它在編譯時被鏈接。 –

回答

1

我相信你想要的是使用-c標誌。這樣做基本上可以讓你編譯一個目標文件,而不需要一個主函數。然後你可以在你的任何程序中使用這個目標文件,你只需要包含頭文件,這樣你的新目標就可以編譯。然後他們會鏈接到這個.o文件。你也可以考慮把它轉換成一個.a文件,但這是一個不必要的步驟。 .a和.o文件唯一真正的區別在於數據如何存儲以及利用它們的編譯命令。這將是用於利用.o文件的典型系列命令。步驟1:首先使用-c標誌編譯.o文件,該文件在最基本的級別上讓編譯器知道缺少一個main是可以的。

COMMAND1: g++ -c someLib.cpp -o someLib.o 

第2步:現在將我們的庫和我想要使用「庫」的cpp文件中的對象合併到同一個程序中。

COMMAND2: g++ someMainFile.cpp someLib.o -o someMainProgram 

在這個過程中動態鏈接的好處是你沒有符號重複。在上面的情況下,someLib.o中存在的符號也將最終存在於某個MainProgram中(例如:如果編譯過,然後從系統中刪除了someLib.o的所有出現,程序仍然會運行!)。如果它們在DLL中,someMainProgram只會在一些MainFile.cpp中有符號,並且它會嘗試在運行時在someLib中找到符號,包括可用的dll。

+0

請你能更具描述性。 我是一個絕對的初學者。 如何'用-c命令構建.o文件'以及我在哪裏構建這些文件? 再次與組合。 我很感激幫助,但這對我來說沒有意義。對不起 – Inafune

+0

@ChrisCM你的意思是把第一個'-o'標誌放在你的第二個命令中,在'g ++'之後?或者是我不知道的國旗的一些用法? – ajp15243

+0

這不應該在那裏,你是正確的,謝謝! – ChrisCM