2013-05-05 55 views
0

我注意到當你使用像SFML這樣的庫時,你自己並不需要鏈接到opengl32.lib,我真的不知道這是怎麼回事,因爲我必須在使用我自己的多媒體庫的項目中鏈接opengl32這是一個靜態庫?僅僅是因爲SFML庫是一個動態庫,並且在SFML項目中鏈接了opengl32? 這不是關於SFML的問題,而是關於所有DLL的一般問題。動態庫是否爲您鏈接其他庫?

回答

1

如果一個動態庫正在使用另一個動態庫,它會自動加載到進程中,是的。

+0

對於使用我的多媒體庫的開發人員來說,這不應該讓這種方式更容易嗎?我的意思是,我猜他們甚至都不需要我建立多媒體DLL時必須連接的必要庫。例如freetype? – grimgrom 2013-05-05 21:03:40

+0

是的,它可以做到這一點。您當然不想知道庫的完整列表,您碰巧使用的某些庫需要實現其自己的依賴關係。當然,如果你正在製作自己的多媒體DLL,那麼希望你隱藏它實際使用的內容,並且不要讓你的客戶端代碼看到你使用的庫是什麼(我的意思是,你不需要客戶端代碼使用freetype,正確 - 他們只是說「我希望Courier Bold中的文本大小爲10」(以某種方式),然後客戶端代碼發送要打印的字符串......) – 2013-05-05 21:08:04

+0

正確。這是我想要達到的。當我通過vC++或gcc構建動態庫時,它會如何默認?我想我只需要使用freetype的靜態庫版本? – grimgrom 2013-05-05 21:11:38

2

是的,DLL可以引用其他DLL,或者在內部靜態編譯它們。爲了檢查外部依賴關係,Microsoft很早以前就開發了一個名爲Dependency Walker的工具,您可以在其中拖動一個DLL或可執行文件,並查看它依賴於哪些DLL(並自動加載)。該工具默認與Visual Studio一起發貨,但您現在可以使用download it from here for free。該頁面解釋了關於它的所有其他內容。

+0

好的謝謝。但這是否意味着我的多媒體庫的用戶需要在我內部編譯的計算機上安裝.DLL文件?我想freetype就是一個很好的例子。 – grimgrom 2013-05-05 21:09:25

+0

如果你動態鏈接它,你自己的DLL將只包含符號引用,所以是的,你需要運送引用的DLL,或讓用戶單獨安裝它。與DirectX沒有什麼不同。 – 2013-05-05 21:48:54

相關問題