2016-11-09 53 views
2

我遇到了一個奇怪的靜態庫,其中包含一個函數(C++)的main()
我只是想知道它的目的是什麼。爲什麼靜態庫包含主函數?

main()如何執行?

+2

它得到執行像任何主要? (無論如何只能有一個)至於其目的爲什麼不問圖書館的作者? – Borgleader

回答

7

從鏈接器的角度來看,main函數的位置並不重要 - 它可以位於靜態庫中,也可以位於獨立的對象文件中,鏈接器無所謂。它從目標文件生成可執行文件,無論它們來自哪裏,並且在最終的可執行文件中,庫/非庫符號之間的所有區別都會丟失。至於目的,我可以想象某種專門的應用程序框架可能在圖書館中佔主要地位,您可以以定義函數的形式爲其提供回調。

+0

SDL執行此操作 - 其「main」提供跨平臺設置和拆卸代碼。當用戶在'#include'ing SDL之後鍵入'main'時,它實際上是一個擴展到'SDL_main'的宏,當所有事情都被正確初始化時,這個宏被從main調用。這提供了另一個用例,儘管我已經看到了對這種方法的相當多的批評。 – jaggedSpire

+0

@ jaggedSpire,不知道這個,但是,這也是一個原因。然而,宏觀上重新定義「主」在我看來是純粹的邪惡。 – SergeyA

+0

是的,那是我看到的主要批評(沒有雙關語意),而且之前也有點受傷。幸運的是,他們讓你強制使用自己的切入點,但是當出現問題時,它會帶來不太連貫的錯誤信息。有趣的東西,真的。 – jaggedSpire

3

我只是想知道它的目的是什麼。

這是一種常見的單元測試或圖形/遊戲引擎框架技術,用於定義可執行程序的入口點,並綁定來自特定工廠模式模板的自定義類定義。

main()如何執行?

它是任何C++程序定義的主要入口點,所以執行由程序啓動鏈接器腳本觸發。


使用這樣的東西,意味着你寫你的客戶端類在一個可執行的項目,與框架約束他們,並省略定義main()功能。

相關問題