詳解cocos2d-x中宏CC_DLL

在Cocos2d-X的源碼中,經常看到宏CC_DLL。這個CC_DLL在不同的平臺,定義不一樣。

1)在iOS/Android/Blackberry/Mac平臺上,CC_DLL代表“空”;

2)在win32平臺上,CC_DLL的定義爲:
#if defined(_USRDLL)
    #define CC_DLL     __declspec(dllexport)
#else         /* use a DLL library */
    #define CC_DLL     __declspec(dllimport)
#endif


簡單介紹:
_declspec(dllexport)聲明一個導出函數,是說這個函數要從本DLL導出。是給別人用的。

__declspe(dllimport)的功能是顯示地導入函數能有效減少目標代碼(因爲不產生Thunk)。

顯示地導入函數的意義是:編譯器會產生質量更好的代碼,由於編譯器確切地知道了一個函數是否在一個DLL中,它就可以產生更好的代碼,不再需要間接的調用轉接。


詳解鏈接:Win32中的CC_DLL意義


3)在linux平臺上,CC_DLL的定義爲:
#if defined(_USRDLL)
#define CC_DLL __attribute__ ((visibility ("default")))
#else         /* use a DLL library */
#define CC_DLL __attribute__ ((visibility ("default")))
#endif


簡單介紹:
gcc使用,__attribute__的關鍵字Visibility的意思是設置動態鏈接庫中函數的可見性。

在代碼中使用__attribute__ ((visibility("default")))另該符號外部可見,這種方法可用有效避免so之間的符號衝突。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章