我正在尝试使用NDK从c++导出一个函数到共享对象(c++),使用macOS mojave上的终端。我已经安装了命令行工具和Xcode的最新版本。
这是我想出口的GetNumber()
#include <iostream>
#define DllExport __declspec(dllexport)
extern "C" {
DllExport int GetNumber() {
return 5 ;
}
} 使用NDK编译代码后,将引发以下错误:

我尝试了clang和Xcode编译器,以及在Windows和Ubuntu上尝试了相同的模式。我也会犯同样的错误。
发布于 2018-11-15 01:36:45
你应该在安卓平台上使用JNIEXPORT而不是DllExport。
您在问题中提供的参考教程对于当前的Android开发来说太老了。
发布于 2018-11-15 02:04:42
通常,如果您想要在跨平台构建上使用解密规范,那么在给定项目ABC的情况下,您将得到类似于这样的松散内容
在dll构建期间,执行导出的Windows项目声明如下:
#define ABC_EXPORT所有计划与项目的lib版本(以及项目本身的lib版本)交互的非Windows项目或项目都声明:
#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构建不必担心这些东西。
我强烈建议使用导出文件,因为这并不有趣。
https://stackoverflow.com/questions/53311182
复制相似问题