GCC (ARM) эквивалент 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)?

Edit:

используется во многих классах. е.г:

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;
};

2 ответов


в принципе, вы, вероятно, не нужно ничего особенного. Но если вы хотите (и если работаете над общими объектами, т. е. *.so файлы), узнать больше о прагмы видимость и видимость атрибуты функция

и вопрос является более целевой операционной системой, чем целевой машиной. (Я бы предположил, что рука, работающая с какой-то неясной системой Windows8/ARM, также нуждается в вашем __declspec; и наоборот,__declspec не имеет смысла в Linux / x86).


вот упрощенная версия того, что мы используем в нашем коде.

#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 bool ida_export set_enum_width(enum_t id, int width);

поскольку вы экспортируете методы C++, вы, вероятно, захотите пропустить extern "C" часть.