我为我的Unity3d应用程序用C ++创建了一些插件文件。到目前为止,该应用程序只是一个简单的原型,所以我只在我的桌面上测试编译为Windows的DLL库。今天我将这些文件重新编译为Android的.so(共享对象)(arm和x86)并收到警告信息。
警告:调用约定' __ stdcall'忽略了这个目标 [-Wignored-属性]
1。这意味着所有函数都编译为__cdecl?
2。我不能在.so库中指定调用约定吗?
我用__cdecl替换__stdcall,但它也会出现警告信息。
答案 0 :(得分:6)
这两个都是IA32的非标准历史微软包袱(它们实际上是C和C ++的非便携,符合标准的扩展,由微软的编译器和GCC实现的互操作性),* NIX世界有 - 从来没有需要。
对于您将遇到的所有ARM系统(以及所有Android系统),调用约定由ARM Procedure Call Standard决定。毫不奇怪,没有相同的ARM,因为没有必要。
您最好的做法是使用空的宏来消除它们。
#define __cdecl
#define __stdcall