5

Unity3d アプリ用に C++ でいくつかのプラグイン ファイルを作成しました。これまでのところ、アプリは単純なプロトタイプにすぎないため、Windows 用の DLL としてコンパイルされたライブラリを使用してデスクトップでのみテストしました。今日、これらのファイルを Android (arm と x86 の両方) 用の .so(Shared Object) として再コンパイルしたところ、警告メッセージが表示されました。

警告: このターゲットに対して呼び出し規約 '__stdcall' が無視されました [-Wignored-attributes]

1. これは、すべての関数が __cdecl としてコンパイルされることを意味しますか?

2. .so ライブラリで呼び出し規約を指定できませんか?

__stdcall を __cdecl に置き換えましたが、警告メッセージも表示されます。

4

1 に答える 1

8

これらは両方とも、IA32 の非標準の歴史的な Microsoft の手荷物です (実際には、移植性がなく、相互運用性のために Microsoft のコンパイラと GCC によって実装された、C および C++ の標準に準拠した拡張機能です)。必要がありました。

ほぼすべての ARM システム (およびすべての Android システム) では、呼び出し規約はARM Procedure Call Standardによって規定されています。当然のことながら、ARM は必要ないため、ARM に相当するものはありません。

最善の方法は、空のマクロを使用してそれらを削除することです。

#define __cdecl
#define __stdcall
于 2015-09-22T22:21:22.270 に答える