4

Mac OS X (10.6.7) で 64 ビットの PicoLisp をビルドしようとして、OSX Dev で問題が発生したようです。ツール GNU アセンブラー ('as')、バージョン 1.38。私の Xcode はバージョン 3.2.4 です。問題を引き起こす (生成された) x86-64.darwin.base.s の行は通常、次のようになります。

call foo@plt

...そして、次のようなエラーメッセージが表示されます。

x86-64.darwin.base.s:41694:junk `@plt' after expression

64 ビットの PicoLisp は、Linux および SunOS 上で問題なくビルドされます。これらのプラットフォームには、おそらく、GNU アセンブラーのより機能的な (新しい) バージョンがあります。新しい GNU アセンブラが OSX/Darwin で利用できるかどうかはわかりません...または他の解決策があるのでしょうか?

OSX/Darwin でこれを自分で試してみたい場合は、必要なファイルをいくつか提供できます。

4

2 に答える 2

5

残念ながら、ここには少なくとも 2 つの重要な問題があると思います。

  1. PLT」は ELF の概念ですが、OS X はまったく異なるオブジェクト/実行可能ファイル形式 - Mach-O を使用します。Mach-O は同様のメカニズムを使用しますが、名前が異なります
  2. MacOS では、asm シンボル名の前にアンダースコアが付きます。だからあなたが欲しいcall _foocall foo組み立てますが、リンクしません。GNU/Linux (ELF) の場合と同様に、シンボルが動的ライブラリにあることが判明したdyld_stub場合、リンカーはエントリを介して間接的に転送します。( ELF システムとは異なり、 共有ライブラリをビルドする場合でも、挿入不可能なシンボルがデフォルトです)call
  3. Apple のasものは、GNU アセンブラのかなり前のバージョンのフォークから派生したように見え、いくつかの場所で、構文 (およびコマンド ライン オプション) が最近のバージョンとかなり異なっています (概念が同じ場合でも)。

i386 および x86-64 Mach-O のサポートに関する作業が、ごく最近binutilsで行われたようです。最新バージョン (2.21) を調査する価値があるかもしれません。しかし、生成されたアセンブリ コードが ELF 固有の巧妙なことを行おうとしている場合は、とにかく大きな問題が発生する可能性があります...

于 2011-06-22T23:20:49.237 に答える