2016-07-19 5 views
0

をリンクしながら、私は単純に窓7 32ビットエラーのasmコード

私は

ml /c /coff helloworld.asm 
link /subsystem:windows /defaultlib:kernel32.lib /defaultlib:user32.lib helloworld.obj 

を組み立てるとリンクするためのコマンド以下の使用

.386 
.model flat, stdcall 
option casemap :none 

extrn [email protected] : PROC 
extrn [email protected] : PROC 

.data 
    HelloWorld db "Welcome to SecurityTube.net!", 0 
    MsgTitle db "First MessageBox", 0 

.code 
start: 
    mov eax, 0 
    push eax 
    lea ebx, MsgTitle 
    push ebx 
    lea ebx, HelloWorld 
    push ebx 
    push eax 
    call [email protected] 
    push eax 
    call [email protected] 
end start 

をメッセージボックスが表示されますアセンブリ言語で簡単なプログラムを書きましたプログラムは完全に組み立てられました。しかし、リンク中にこのエラーが発生しました:

Microsoft (R) Incremental Linker Version 5.12.8078 
Copyright (C) Microsoft Corp 1992-1998. All rights reserved. 

LINK : fatal error LNK1104: cannot open file "kernel32.lib" 

なぜこのエラーが発生するのですか?

+0

ライブラリパスを指定する必要があります。 – IInspectable

+0

どうすれば設定できますか? – Rob

+2

[Microsoft Macro Assembler Reference](https://msdn.microsoft.com/en-us/library/afzk3475.aspx)は、開始するのに適しています。 – IInspectable

答えて

3

あなたが探しているコマンドがあるインストールされていない場合:代わりにml(のみリンクせずに組み立て)/cスイッチと最初に、次にlinkを実行しているを実行しているの

ml.exe helloworld.asm 
    /coff 
    /link 
     /subsystem:windows 
     /defaultlib:kernel32.lib 
     /defaultlib:user32.lib 
     /libpath:C:\...somewhere... 
     helloworld.obj 

注意を、私はすべてを1つのコマンドラインにまとめました。これにより、MASMが実行されてコードがアセンブルされ、すぐにリンクされます。

マジックソースは/linkスイッチで、の後にあるのすべての引数をリンカーに渡します。

あなたが持っていなかった新しいスイッチには、/libpathがあります。これは、LIBファイルがどこにあるかをリンカーに知らせるものです。これらはWindows SDKの一部なので、ハードディスク上のそのディレクトリを探して、そのパスをC:\...somewhere...の代わりにする必要があります。正確な場所は、インストールしたSDKのバージョンとインストール方法(個別に、またはVisual Studioの一部として)によって異なります。 SDKをお持ちでない場合は、here for Windows 10、またはfor earlier versionsをダウンロードしてください。

MASMのドキュメントはすべて、command line optionsの包括的なリストを含むavailable onlineです。最新のバージョンで十分です(すべてのバージョンをダウンロードする必要はありません)。リンカーについても同じことです。そのoptions are here


アンでも簡単に解決策は、Visual Studioコマンドプロンプトを開き、あなたの組み立てのすべてを行うこととそこからリンクするでしょう。これは実際には環境を設定するバッチファイルを実行するので、必要なすべてのSDKファイル(ヘッダー、ライブラリなど)へのパスを指定する必要はありません。スタートメニューでこれを見つけるか、手動で実行します:

C:\Program Files (x86)\Microsoft Visual Studio x.x\VC\bin\vcvars32.bat 

32ビットビルド環境をセットアップします。

1

Visual Studioのディレクトリ構造を確認して、$(WindowsSdkDir)\libが存在するかどうか確認しましたか?
http://msdn.microsoft.com/en-us/windows/desktop/bg162891.aspx

+0

私は今すぐインストールしていますが、Windows SDKは何ですか?なぜそれを使用するのですか? (ちょうど知識のため) – Rob

+0

私はこのリンク(https://www.microsoft.com/en-in/download/details.aspx?id=8279)からWindows 7にインストールしました。それはうまくいかなかった。環境のパスを設定する必要がありますか?それとも何か? – Rob

+0

Kernel.LibとUser32.Libは、C:¥Program Files¥Microsoft SDKs¥Windows¥v1.1¥Libにあります。 – Rob

関連する問題