使用 __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 上尝试了相同的模式。我得到同样的错误。
您应该在 Android 平台上使用 JNIEXPORT
而不是 DllExport
。
您在问题中提供的参考教程对于当前的 Android NDK 开发来说太旧了。
通常情况下,如果您想在跨平台构建中使用 declspec,给定一个项目,您将拥有类似这样的东西 ABC
:
Windows 执行导出的项目在 dll 构建期间像这样声明:
#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();
更好的是,如果您有一个 OS 障碍层,您可以使用另一个 #define
而不是 __declspec
来完全确保 POSIX 构建永远不必担心这些东西。
我强烈建议改用导出文件,因为这不好玩。
我正在尝试使用 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 上尝试了相同的模式。我得到同样的错误。
您应该在 Android 平台上使用 JNIEXPORT
而不是 DllExport
。
您在问题中提供的参考教程对于当前的 Android NDK 开发来说太旧了。
通常情况下,如果您想在跨平台构建中使用 declspec,给定一个项目,您将拥有类似这样的东西 ABC
:
Windows 执行导出的项目在 dll 构建期间像这样声明:
#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();
更好的是,如果您有一个 OS 障碍层,您可以使用另一个 #define
而不是 __declspec
来完全确保 POSIX 构建永远不必担心这些东西。
我强烈建议改用导出文件,因为这不好玩。