5

私は大学でアセンブリを学んでおり、MASM 615 が収録された CD を受け取り、Irvine32 インクルード ライブラリを使用しています。学校のコンピューターではすべて正常に動作しますが、自宅のコンピューターで同じコードをコンパイルして実行しようとすると、リンク エラーが発生します。

INCLUDE Irvine32.inc

.code
main PROC

mov eax,10000h      ; EAX = 10000h
add eax,40000h      ; EAX = 50000h
sub eax,20000h      ; EAX = 30000h
call DumpRegs

exit
main ENDP
END main

このコードは、学校の PC で正常に動作します。自宅で DOS に入り、パスを MASM フォルダーに設定し、Make32 ファイルを実行します。

これは私が得るエラーです:

LINK32 : error LNK2001: unresolved external symbol _mainCRTStartup
test.exe : fatal error LNK1120: 1 unresolved externals

プログラムはコンパイルされます (.lst、.obj、および .pdb ファイルを取得します) が、それだけです。自宅に 64 ビットのオペレーティング システムがあるためだと思いますが、これを 64 ビット環境で起動して実行する方法がわかりません。CD や本には 64 ビット システムに関するものは何もありません。make16 または make32 の .bat ファイルしかありません。回避策がない限り、家で仕事をすることができないので、本当に残念です。

4

4 に答える 4

13

他の答えは私を混乱させたので、私の解決策を追加します。プロジェクトのプロパティで、

構成プロパティ >> リンカー >> 詳細設定

Advancedでは、一番上に Entry Point が表示されます。と入力しmainます。

于 2016-02-27T19:01:24.563 に答える
5

Windows のエントリのデフォルト シンボルは _main ではなく、エラー メッセージの _mainCRTStartup であるため、エントリ ポイントを手動で指定する必要があると思います。リンカー オプションで/ENTRY :entry_point (アセンブリ内の一部のプロシージャ) を使用してエントリ ポイントを指定できます。

于 2012-09-12T15:08:28.640 に答える
3

私はそれが少し遅れていることを知っています-多分それは誰かを助けるでしょう-しかし、このようにメインをパブリックとして公開する必要があります

INCLUDE Irvine32.inc

.code
main PROC

mov eax,10000h      ; EAX = 10000h
add eax,40000h      ; EAX = 50000h
sub eax,20000h      ; EAX = 30000h
call DumpRegs

exit
main ENDP

PUBLIC main

END 

最後から 2 番目の行に注意してください

于 2013-07-27T15:00:15.037 に答える
1

これを含めてみてください

includelib  \Irvine\Irvine32.lib
includelib  \Irvine\User32.lib
includelib  \Irvine\kernel32.lib
于 2015-07-30T02:37:52.153 に答える