繁体   English   中英

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

Error using __declspec(dllexport) : Unknown type name '__declspec'

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试使用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导出共享库

2 个回复

您应该在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构建无需担心这些问题。

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

1 cmake上未知类型名称'_declspec'

我正在尝试使用cmake生成共享的本机库。 该库的内容无非就是本机功能,以后将在Unity中使用。 这就是为什么函数具有扩展名__declspec(dllexport)的原因,因此在Unity部分中可以使用dllImport对其进行调用。 当我尝试在cmake中编译该库时,我的问题就来 ...

2 如何摆脱 Xcode 中的“未知类型名称‘__declspec’”错误

我尝试在 Xcode 中为 Google Cardboard 构建和运行我的第一个项目。 我第一次遇到一些基本上说我的签名不正确的东西,并要求我登录以便计算机可以修复它(似乎是这样)。 (我包含此信息,以防它以某种方式与错误有关。) 然后我遇到了错误Unknown type name '__d ...

3 使用__declspec(dllexport)

嗨,我有点与dllexport混淆了。当我在类中使用__declspec(dllexport)时 我将C类导出到dll文件还是从dll文件导出C类? ...

4 __declspec(dllexport)的使用

我正在以OOP方式实现我的.dll库 我的宏是: 在将DLLINTERFACE放在使用某些std的类名之前之后,编译器向我发出一些警告,我应该为与std使用的每个函数提供dll-interface 。 我试图通过将DLLINTERFACE放在某些函数DLLINTERFACE解决此 ...

6 警告C4091:'__declspec(dllexport)'

我在尝试从dll中导出名为“ Interface_API”的函数时使用以下代码。 当我编译此代码时,它给出以下警告,并且该函数未导出。 当我按如下所示更改声明时,我没有得到警告,它会正确导出。 我有点困惑,因为我已经在不同的dll中使用了它,并且效果很好。 有什么线索吗 ...

2014-12-27 00:23:34 1 2899   declspec
7 使用__declspec(dllexport)代替-EXPORT:

我正在查看有关导出函数的文档,它指出__declspec(dllexport)应该在命令行版本-EXPORT之前使用(如果可能)。 我目前正在使用命令行变体。 在尝试进行这些更改时,我试图了解正确的实现,但是遇到了问题。 DLL的头文件: DLL的源文件: 应用程序的源 ...

9 使用__declspec(dllexport)从类创建对象

我想通过以下操作访问此功能。 Visual Studio建议执行“ Part :: read();” 和f12对该功能起作用。 但是在编译时会抱怨语法错误,因为它认为PartExport是类名。 如何访问此函数或创建MyClass对象? 编辑:我意识到该类的所有语法错误都来 ...

暂无
暂无

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

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