c++中跨平台头文件写法

#if defined(_WIN32) || defined(_MSC_VER)  //如果定义了变量_WIN32或者_MSC_VER,即在win平台
#ifdef DEEPNETAPI_EXPORT  // 如果定义了DEEPNETAPI_EXPORT这个变量,对于调用这个库的人来说,一般没有定义这个变量,所以会调用else部分的内容,但对于开发这个库的人来说,需要把这个库给别人用,所以需要自己定义这个变量,可以通过-DDEEPNETAPI_EXPORT来定义该变量
#define DEEPNETAPI __declspec(dllexport)   // 对库开发者来说,调用这句话,目的是导出该库,生成对应的so给别人使用,所以叫导出export
#else
#define DEEPNETAPI __declspec(dllimport)  // 对于库的使用者来说。调用这句话,即把这个库导入到自己的工程里面,所以叫导入import
#endif // DEEPNETAPI_EXPORT
#elif defined(__linux__) || defined(__APPLE__)  // 对于linux和苹果系统调用下面的话
#ifdef DEEPNETAPI_EXPORT
#define DEEPNETAPI __attribute__ ((visibility ("default")))   // 对库开发者来说,只希望把一些需要公开的函数或者类给使用者,其他的进行隐藏,所以在导出库的时候,需要在编译选项上添加-fvisibility=hidden,只有函数或者类前加了__attribute__ ((visibility ("default")))的可以被调用者使用,其他的全部隐藏。通过在编译选项上添加-fvisibility=hidden则把其他函数进行隐藏,只有__attribute__ ((visibility ("default")))的函数会保持默认,即全局可见,如果编译时不加-fvisibility=hidden,则不管函数或者类前是否添加__attribute__ ((visibility ("default"))),都是全局可见,因为默认是default
#else
#define DEEPNETAPI
#endif // DEEPNETAPI_EXPORT
#endif

class DEEPNETAPI DeepNet {
}

int DEEPNETAPI SetSchedAffinity(const std::vector<int>& cpuids);

__attribute__ ((visibility ("default"))) int subfunc1(int a, int b);
DEEPNETAPI int subfunc2(int a, int b);
int DEEPNETAPI subfunc3(int a, int b);  // int和DEEPNETAPI顺序没有关系

代码

#if defined(_WIN32) || defined(_MSC_VER) 
#define DEEPNETAPI __declspec(dllexport)  
#else
#define DEEPNETAPI __declspec(dllimport)  
#endif // DEEPNETAPI_EXPORT
#elif defined(__linux__) || defined(__APPLE__)  
#ifdef DEEPNETAPI_EXPORT
#define DEEPNETAPI __attribute__ ((visibility ("default")))   
#else
#define DEEPNETAPI
#endif // DEEPNETAPI_EXPORT
#endif

class DEEPNETAPI DeepNet {
}

int DEEPNETAPI SetSchedAffinity(const std::vector<int>& cpuids);

__attribute__ ((visibility ("default"))) int subfunc1(int a, int b);
DEEPNETAPI int subfunc2(int a, int b);
int DEEPNETAPI subfunc3(int a, int b);  // int和DEEPNETAPI顺序没有关系

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值