2011-05-18 130 views
2

我使用SFML,並在Code :: Blocks和mingw32中構建應用程序。我已經將SFML庫(sfml-whatever.a)添加到我的項目中,並且它運行良好。靜態和動態庫

但iIrc,靜態庫得到'編譯'到可執行文件。如果是這樣的話,爲什麼我必須將所有的SFML DLL放在可執行文件的旁邊,以便它可以在Code :: Blocks以外的任何地方運行?如果我想以某種方式將Code :: Blocks中的DLL動態鏈接到我的項目中,(我不知道該怎麼做),我是否還需要將所有.a文件的可執行文件發送給它正常運行?

在此先感謝,我對靜態或動態庫不是很熟悉。如果它有什麼區別,我正在使用Ubuntu linux,而且我正在使用mingw32進行交叉編譯。

回答

2

在這種情況下,靜態庫只包含與動態庫接口的代碼,它不是實際的庫代碼。

+0

感謝您的清除。所以,如果我理解正確,我仍然必須鏈接到靜態庫,但將DLL放在可執行文件旁邊? – Keelx 2011-05-18 23:31:02

+0

@Keelx:是的,除非有靜態鏈接的選項。 – 2011-05-18 23:34:48

6

使用SFML,您可以靜態鏈接到它們的庫,如上面註釋中所述。這樣它的全部編譯到可執行文件中,你不需要將它與DLL一起發貨。這是如何完成的取決於你是否使用SFML 1.6或2.0。

1.6不需要任何預處理器定義,但2.0要求您爲編譯器使用cmake構建解決方案/ makefile,然後在您的預處理器定義中使用#define SFML_STATIC