在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之間的符號衝突。