2011-06-08 42 views
3

我正在增強一個工具。 請注意,這個工具將被鏈接到測試程序,該程序將具有main()的功能,所以我的工具不能有主。該工具具有測試程序將使用的許多功能。如何模仿構造函數或靜態塊C

現在另外,我想添加一個計時器到這個工具。這個想法是:當測試程序鏈接到這個工具並啓動時,計時器應該自動啓動。

如果這是C++,我就創建了一個帶有構造函數的類,所以,每當類被加載,構造函數首先被調用,我可以初始化我的計時器在構造函數中。

如果這是Java中,我會簡單地創建一個全局靜態塊,並把計時碼中的靜態塊中。

但是我的工具純粹是Linux中的C語言,所以我該如何實現這個目標?

請幫幫我。

+0

是您的工具的共享庫? – nos 2011-06-08 09:30:24

+0

工具如何與測試程序「鏈接」? – pascal 2011-06-08 09:30:29

+0

我想通過記錄'main()'啓動時用戶必須調用函數'X'來使用你的庫。 – RedX 2011-06-08 09:31:50

回答

4

這看起來像你的情況下,也:

How do I get the GCC __attribute__ ((constructor)) to work under OSX?

從GCC文檔:

構造
析構函數
構造函數(優先級)
析構函數(優先級)

構造或屬性導致 函數在執行進入main()之前被自動調用 。 同樣,析構函數屬性 導致函數main()的具有 完成或出口()被調用後自動被調用 。 功能與這些屬性是用於初始化將 可以在 執行該程序的過程中隱式地使用數據 有用。

+2

@kinsmachert這似乎是你想要的。這裏是文檔:http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html – RedX 2011-06-08 09:38:47

+0

@RedX和葡萄藤:謝謝,讓我檢查一下,很快回復你。 – kingsmasher1 2011-06-08 09:41:35

+0

@RedX,哦,是的,我應該提供了鏈接:) – vines 2011-06-08 09:42:04

2

建設時寫自己的替代調用main()crt*.o目標文件,並鏈接到它。

+0

測試程序也會把它稱爲自己的庫,在那裏會有crti,crto等,所以如果我這樣做,實際的將被覆蓋,給出不希望的結果。 – kingsmasher1 2011-06-08 09:35:55

+0

我不明白你爲什麼認爲它會被覆蓋。它們是靜態鏈接的,所以如果你不想使用它們,那麼就不要鏈接它們。 – 2011-06-08 09:41:46

+0

我們的測試程序實際上是一個在多個平臺上運行的巨大代碼[ x86 :)],我們不能限制用戶,不要使用他們自己的crt,因爲這將是一個限制。我認爲葡萄酒和RedX的解決方案將會很有用,並且也要感謝你,我們可以將此視爲一種替代解決方案。所以我也提高了你的答案。 – kingsmasher1 2011-06-08 09:49:56