Visual C++ による Windows プログラムのリンク方法

1. 準備 ~ test.obj の作成

前回のページでは test.cpp をコンパイルして、test.obj を作成しました。

Visual C++ による Windows プログラムのコンパイル方法

今回は test.obj から実行可能ファイルを作成し、プログラムを実行してみましょう。

リンクとは?

用語の説明を簡単にしておきます。

「リンク」とは何でしょうか?

リンクは、「オブジェクトファイルとライブラリファイルから、実行可能ファイルを作成する作業」 と思っていてください。

リンクという作業を行うプログラムを、「リンカー」といいます。

Visual C++ に付属するリンカーは 「link.exe」 です。

結局、今回実際に行う作業は、「リンカーである link.exe にオブジェクトファイル (test.obj) 及び 必要なライブラリファイル (*.lib) を読み込ませて、 実行可能ファイルを作る作業」 ということになります。

test.obj から実行可能ファイルを作成しよう!

test.obj は既に皆さんの手元に準備してあると思います。

ここでは test.obj から、実行可能ファイルである test.exe を作成します。

Visual Studio のコマンドプロンプトを開きます

Visual Studio 2017 の場合は、スタートメニューの次の場所にあります。

Visual Studio 2017Developer Command Prompt for VS 2017

C:\temp に移動します

> cd /d C:\temp

ここで、/d オプションはドライブが異なっても移動できるようにするためのオプションです。

尚、このディレクトリに test.obj が格納されていることを想定しています。

必要なライブラリを指定してリンクする

test.cpp では GetUserName API を使っているので、ライブラリファイル advapi32.lib を指定してリンクする必要があります。

どの API がどのライブラリを必要とするかは、MSDN を確認します。

例えば GetUserName の場合は、MSDN には次のような記載があります。

GetUserName Function
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724432(v=vs.85).aspx

この資料の下の方に記載から、この API は advapi32.lib を必要としていることがわかります。

ライブラリファイル自体は、lib 環境変数で示した場所にあるものが参照されます。

Visual Studio の Command Prompt から実行すると、lib 環境変数が適切に設定されているはずです。

逆に言えば、Visual Studio コマンドプロンプトというのは、適切な環境変数が設定されたコマンド実行環境である、といえます。

さて、実際にコマンドを実行しましょう。

> link advapi32.lib test.obj
Microsoft (R) Incremental Linker Version 14.10.25019.0
Copyright (C) Microsoft Corporation.  All rights reserved.

この結果、実行可能ファイル test.exe が生成されます。

> dir /b
test.cpp
test.exe
test.obj

> test
keisukeo

以上のように test.exe を実行すると、確かにユーザー名が表示されました。