繁体   English   中英

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

[英]Error using __declspec(dllexport) : Unknown type name '__declspec'

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

这是我要导出的GetNumber()

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

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

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

在此处输入图片说明

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

我遵循的教程使用ndk导出共享库

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

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

通常,如果您想在跨平台构建中使用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构建无需担心这些问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM