使用__declspec(dllexport)时出错:未知类型名称'__declspec'

时间:2018-11-15 01:29:21

标签: c++ c android-ndk dllexport

我正在尝试使用macOS mojave上的终端从c ++使用NDK将函数导出到共享对象(.so)。我已经安装了最新版本的命令行工具和Xcode。

这是我要导出的GetNumber()

#include <iostream>
#define DllExport __declspec(dllexport)

extern "C" {
   DllExport int GetNumber() {
      return 5 ;
   }
} 

使用NDK编译代码后,它将引发以下错误

enter image description here

我尝试了clang和Xcode编译器,并在Windows和Ubuntu上尝试了相同的模式。我遇到同样的错误。

Tutorial i followed to export shared library using ndk

2 个答案:

答案 0 :(得分:2)

在Android平台上,您应该使用JNIEXPORT而不是DllExport

对于当前的Android NDK开发,您在问题中提供的参考教程太旧了。

答案 1 :(得分:0)

通常,如果要在跨平台构建中使用declspec,给定项目ABC,您将得到的内容大致是这样的:

在dll构建过程中,执行导出的Windows项目声明如下:

#define ABC_EXPORT

所有非Windows项目或计划与该项目的lib版本(以及项目本身的lib版本)进行交互的项目声明:

#define ABC_LIB

然后您的项目中就有

#ifdef ABC_LIB //or #if (defined(ABC_LIB) || !defined(WIN32))
  #define ABC_API
#else
  #ifdef ABC_EXPORT 
    #define ABC_API __declspec(dllexport)
  #else
    #define ABC_API __declspec(dllimport)
  #endif
#endif

然后将所有函数声明为:

ABC_API void foo();

更好的是,如果您拥有操作系统的阻碍层,则可以使用另一个#define而不是__declspec来完全确保POSIX构建物永远不必担心这些事情。

我强烈建议您改用导出文件,因为这不好玩。