を作るg++ -mx32 hellow.cpp
作品とのコード、3共通のABI USAがあります。インテル互換の標準的なマシン(Itaniumではなく)で動作します。
- 「x86」と呼ばれることが多い古典的な32ビットアーキテクチャで、
i[3-6]86-linux-gnu
のようなトリプルがあります。レジスタとポインタは両方とも32ビットです。
- 元々はAMDからの64ビット拡張で、略して「amd64」と呼ばれ、GNUのトリプルは
x86_64-linux-gnu
です。レジスタとポインタは両方とも64ビットです。
- 新しい "x32" ABI、トリプル
x86_64-linux-gnux32
。レジスタは64ビットですが、ポインタは32ビットのみであり、ポインタの多いワークフローでは多くのメモリを節約します。また、他のすべての64ビットのみのプロセッサ機能を使用できるようにします。
上記の各システムコールインターフェイスは、ld.so
という独自のライブラリセットを持っていますが、3つすべてを同じカーネルで実行することは可能です。 Linuxの
は、そのローダーは以下のとおりです。
% objdump -f /lib/ld-linux.so.2 /lib64/ld-linux-x86-64.so.2 /libx32/ld-linux-x32.so.2
/lib/ld-linux.so.2: file format elf32-i386
architecture: i386, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x00000a90
/lib64/ld-linux-x86-64.so.2: file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x0000000000000c90
/libx32/ld-linux-x32.so.2: file format elf32-x86-64
architecture: i386:x64-32, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x00000960
さて、あなたが何かあなたの設定で台無しにされたことを意味「互換性のないライブラリをスキップ」についてのメッセージを、取得している場合。環境に悪い変数がないか、コマンドラインで渡されたか、パッケージマネージャのコントロールの外にインストールされたファイルであることを確認してください。
静的ライブラリは一般的には価値があるものよりもはるかに遠い*ということに注意してください。 'setuid'やその他の' capabilities'を必要とせず、必要としない場合は、 '$ {ORIGIN}'と相対的な '-rpath'を使って動的ライブラリを使用してください。 – o11c