5

我在 C++ 中为我的 Unity3d 应用程序创建了一些插件文件。到目前为止,该应用程序只是一个简单的原型,所以我只在桌面上使用编译为 Windows 的 DLL 的库进行了测试。今天,我将这些文件重新编译为 Android(arm 和 x86)的 .so(共享对象)并收到一条警告消息。

警告:此目标忽略调用约定“__stdcall”[-Wignored-attributes]

1.这意味着所有函数都编译为__cdecl?

2. .so库中不能指定调用约定吗?

我用 __cdecl 替换了 __stdcall,但它也会出现警告消息。

4

1 回答 1

8

这两者都是 IA32 的非标准历史 Microsoft 包袱(它们实际上是 C 和 C++ 的不可移植的、符合标准的扩展,由 Microsoft 的编译器和 GCC 实现以实现互操作性),*NIX 世界已经 - 而且从来没有有需要。

在您将遇到的几乎所有 ARM 系统(以及所有 Android 系统)上,调用约定由ARM 过程调用标准规定。毫不奇怪,没有 ARM 的等价物,因为不需要它们。

您最好的做法是使用空宏使它们消失。

#define __cdecl
#define __stdcall
于 2015-09-22T22:21:22.270 回答