使用共享库为Android调用约定

Jen*_*nix 3 c++ android arm calling-convention stdcall

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

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

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

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

我用__cdecl替换了__stdcall,但它也发生了一条警告消息.

mar*_*rko 6

这两者都是用于IA32非标准历史微软行李(他们实际上是不可移植的,符合标准的扩展C和C++,微软的编译器和GCC互操作性实现),为此*NIX世界上有 - 永不有需要.

几乎所有您将遇到的ARM系统(以及所有Android系统),调用约定都由ARM过程调用标准决定.毫不奇怪,没有相同的ARM,因为没有必要.

您最好的做法是使用空宏来消除它们.

#define __cdecl
#define __stdcall
Run Code Online (Sandbox Code Playgroud)

  • 我强烈怀疑Android上的绑定无关紧要:只有一个调用约定在使用中.如果由于某种原因它抱怨它们缺席,请安排只有在使用非Microsoft软件编译器构建库时才应用宏. (2认同)