Windows では「互換性のない署名」エラーが多数発生するが、Flex 4 Gumbo を搭載した Mac OS X では発生しない
-
16-09-2019 - |
質問
純粋な Action Script 3 プロジェクトがあり、Flex 4 SDK を使用してコンパイルしています。必要に応じて compc、mxmlc、および asdoc を自動的に呼び出す標準 Makefile があります。私の Mac OS X 10.4 以降のコンピュータでは、プロジェクトはエラーや警告もなく正常にコンパイルされています。ただし、これを Windows XP (Cygwin がインストールされている) で開発している同僚と共有すると、「互換性のない署名」エラーの非常に大きなリストが表示されます。なぜこのようなエラーが発生するのでしょうか?署名に互換性がないように見えます。
注記:問題の署名は「オリジナル」と「エクスポート」で、次のように使用されます。
public interface AbstractX { function original() : Object; function export() : Object }
public class ImportX implements AbstractX { public ImportX(obj : Object) { _loadedobj = obj; _exportobj = obj.export(); } public static function wrap(obj : Object) : AbstractX { var result : AbstractX = null; if ( obj != null ){ if ( obj is AbstractX ){ result = obj as AbstractX; }else if ( obj.original() is AbstractX ){ result = obj.original() as AbstractX; }else{ result = new ImportX(obj); } } return result; } public function original() : Object { return _loadedobj; } public function export() : Object { return _exportobj; } private var _loadedobj : Object = null; private var _exportobj : Object = null; }
public class X implements AbstractX { public function X() : void { //... } public function original() : Object { return this; } public function export() : Object { if ( ! _export ){ _export = new ExportX(this); } return _export; } private var _export : Object = null; }
注記:上記のコードは私の解決策の一部です 2 つの SWF ファイルで使用されている Action Script 3 クラスが、一方の SWF がもう一方の SWF を動的にロードするときに同じクラスに解決されるようにするにはどうすればよいですか?
解決
Mac OS X でもコンパイルできるでしょうか?最近ビルド スクリプトを変更したが、「インクリメンタル」コンパイラ オプションを使用している場合は、単にキャッシュされたビルドのおかげで Mac 上で正常にビルドされている可能性があります。*.cache ファイルをすべて削除し、Mac 上で再構築して、同じエラーが発生するかどうかを確認してください。
奇妙な「署名に互換性がありません」エラーが発生する原因の 1 つは、出力ディレクトリをライブラリ パスに配置した場合です。たとえば、*.swc ファイルを $(MAINFOLDER)/lib に出力しており、ライブラリ パスに $(MAINFOLDER)/lib もリストされている場合です。この理由は、最初はコード内のインターフェイスが使用されるが、ビルドの途中で (互換性のない) コンパイル済みインターフェイスが使用されるためだと思われます。
他のヒント
問題はありません...sig は完全に互換性があります...WinXP 用のガンボを使用すると、私のマシンでは問題なくコンパイルできます...ただし公開する必要がある 関数 インポートX ...そして ExportX
不明です...それを手動でコンパイルしようとするとどうなるでしょうか?エラーが cygwin や makefile から来るとは思いませんが、今は誰が...ただし、これはクロスプラットフォームなので、ANT を使用することもできます...続きを読む ここ (実際に興味深いのはページ 4 です) ...
問題は別のところにあると思います...あるいは彼のコンパイル出力をここに投稿するかもしれません...
編集: OK、それなら間違いなく彼のコンパイラ出力を投稿するべきです。なぜそれがコンパイルできないのか理解できないからです...
ただし注意事項が 1 つあります:私は今あなたのメモを読みました、あなたが何をしようとしているのかについて...実際にはうまくいかないと思います...2 つの swf 間でインターフェイスを共有したいので、同じ問題が発生します。インターフェイスを実装するということは、実際には単にメソッドを実装することを意味するのではなく、トレイト オブジェクトがインターフェイスを実装していることを認識していることを意味します。したがって、同じエラーが発生します...
挨拶します
バックツードス