1

32 ビットのアセンブリ ファイルを作成しましたが、それを 64 ビットの Linux システムでコンパイル (および動作) させたいと考えています。と をインストールgcc-multiliblib32-glibcました。

次のコマンドでバイナリを作成しようとしています。

nasm -f elf test.asm
ld -melf_i386 -o test -e _main test.o /usr/lib32/libc.so.6 

_mainエントリーポイントはどこですか。ファイル test が作成され、それを chmod します。

chmod ugo+x ./test

しかし、私はそれを開くことができません。私は得る:

bash: ./test: No such file or directory

vimで開くことができるので、ファイルが存在することは確かです(そして、最初の行にELFが書かれているのを見ることができます)。何が起きてる?

4

2 に答える 2

0

動的ライブラリを使用するには、もう少し労力が必要なため、このメッセージは動的リンカーに関係しています。簡単な方法は、静的 C ライブラリ (/usr/lib32/libc.a) にリンクすることです。ただし、エントリ ポイントを「main」と呼び、通常の C プログラム (gcc -m32 -o test test.o) のようにリンクするだけでも機能します。

于 2012-08-11T00:49:39.063 に答える
-1

コンパイラにない問題。

実際、間違ったコマンドを入力しています。

1) 32 ビット プログラム コマンドをコンパイルする場合: nasm -f elf32 test.asm

    and for 64 bit asm or assembly language file command is : nasm -f elf64 test.asm

2)コンパイル後、そのコマンドのファイルをリンクする必要があります:

     ld -o test test.o  ( for both the 64/32 bit program)

3)これで、次のコマンドを使用してプログラムを実行できるようになります。

      ./test
于 2014-04-19T13:24:38.547 に答える