[英]which gcc distro supports __declspec(dllexport) _cdecl and _stdcall
[英]GCC (ARM) equivalent to __declspec(dllexport)
在為x86構建應用程序時,以下代碼可以正常工作:
#if defined _WIN32
#define LIB_PRE __declspec(dllexport)
#elif defined __unix__
#define LIB_PRE
#else
#define LIB_PRE __declspec(dllexport)
#endif
但是給GCC(ARM)一個錯誤。 我發現__declspec(dllexport)不適用於GCC。 如果是這樣,我應該為GCC(ARM)使用什么?
編輯:
它用於很多類。 例如:
class CJsonValueString : public CJsonValue
{
private:
jstring value;
public:
LIB_PRE CJsonValueString(jstring value);
LIB_PRE CJsonValueString(const CJsonValueString * value);
LIB_PRE jstring ToString() const;
LIB_PRE int ToInt() const;
LIB_PRE int64 ToInt64 () const;
LIB_PRE float ToFloat () const;
LIB_PRE void GetValue(jstring & str) const;
};
這是我們在代碼中使用的簡化版本。
#ifdef __cplusplus
#define EXTERNC extern "C"
#else
#define EXTERNC
#endif
#if defined(__NT__) // MS Windows
#define idaapi __stdcall
#define ida_export idaapi
#if defined(__IDP__) // modules
#define idaman EXTERNC
#else // kernel
#if defined(__X64__) || defined(__NOEXPORT__)
#define idaman EXTERNC
#else
#define idaman EXTERNC __declspec(dllexport)
#endif
#endif
#define ida_local
#elif defined(__UNIX__) // for unix
#define idaapi
#if defined(__MAC__)
#define idaman EXTERNC __attribute__((visibility("default")))
#define ida_local __attribute__((visibility("hidden")))
#else // Linux
#if __GNUC__ >= 4
#define idaman EXTERNC __attribute__ ((visibility("default")))
#define ida_local __attribute__((visibility("hidden")))
#else
#define idaman EXTERNC
#define ida_local
#endif
#endif
#endif
在Linux / OS X上,我們默認使用-fvisibility=hidden -fvisibility-inlines-hidden
編譯所有代碼,並標記我們要用idaman
導出的idaman
,例如
idaman bool ida_export set_enum_width(enum_t id, int width);
由於您正在導出C ++方法,因此您可能希望跳過extern "C"
部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.