android 的共享库调用约定
Calling Convention with a shared library for android
我用 C++ 为我的 Unity3d 应用程序创建了一些插件文件。到目前为止,该应用程序只是一个简单的原型,所以我只在我的桌面上使用编译为 Windows 的 DLL 的库进行测试。今天,我将这些文件重新编译为 Android(arm 和 x86)的 .so(共享对象),并收到一条警告消息。
warning : calling convention '__stdcall' ignored for this target
[-Wignored-attributes]
1.这意味着所有函数都被编译为 __cdecl?
2。我不能在.so库中指定调用约定吗?
我用__cdecl替换了__stdcall,但是也出现了警告信息。
这两个都是 IA32 的非标准历史 Microsoft 包袱(它们实际上是不可移植的、符合标准的 C 和 C++ 扩展,由 Microsoft 的编译器和 GCC 实现以实现互操作性),*NIX世界有——而且从来没有需要。
在您将遇到的几乎所有 ARM 系统(以及所有 Android 系统)上,调用约定由 ARM Procedure Call Standard 规定。毫不奇怪,没有 ARM 的等价物,因为不需要它们。
最好的做法是使用空宏让它们消失。
#define __cdecl
#define __stdcall
我用 C++ 为我的 Unity3d 应用程序创建了一些插件文件。到目前为止,该应用程序只是一个简单的原型,所以我只在我的桌面上使用编译为 Windows 的 DLL 的库进行测试。今天,我将这些文件重新编译为 Android(arm 和 x86)的 .so(共享对象),并收到一条警告消息。
warning : calling convention '__stdcall' ignored for this target [-Wignored-attributes]
1.这意味着所有函数都被编译为 __cdecl?
2。我不能在.so库中指定调用约定吗?
我用__cdecl替换了__stdcall,但是也出现了警告信息。
这两个都是 IA32 的非标准历史 Microsoft 包袱(它们实际上是不可移植的、符合标准的 C 和 C++ 扩展,由 Microsoft 的编译器和 GCC 实现以实现互操作性),*NIX世界有——而且从来没有需要。
在您将遇到的几乎所有 ARM 系统(以及所有 Android 系统)上,调用约定由 ARM Procedure Call Standard 规定。毫不奇怪,没有 ARM 的等价物,因为不需要它们。
最好的做法是使用空宏让它们消失。
#define __cdecl
#define __stdcall