#pragma twice

KAB-studio > プログラミング > #pragma twice > 325 Version 15.25 「プロジェクトの設定」リンク編(2)

#pragma twice 325 Version 15.25 「プロジェクトの設定」リンク編(2)

前のページへ 表紙・目次へ 次のページへ

 Version 15.25
プロジェクトの設定リンク編(2)

それでは前回の続き、【プロジェクトの設定】ダイアログの【リンク】
ページの【バージョン情報】から
バージョン情報って、ダイアログにもあるし、リソースにもあるよね
その両方とも違います。このバージョン番号は Exe や DLL に埋め込むも
ので、実際、ほとんど使いません
なんだ、そうなんだ
では次
って、それなら前回やればいいじゃん!
次は【インプット】ページ
聞いてないし……
まず最初の【オブジェクト/ライブラリ モジュール】は、【一般】ページ
のものと同じです
あ、ホントだ、片方入力したらもう片方も、ね
次の【無視するライブラリ】は、使用しないライブラリファイルを指定し
ます
【C/C++】の【次のシンボルを無効にする】と同じ?
近いものかな。ここに kernel32.lib を書き込んでリビルドしてみて
ほい。うわ、エラー出まくり

Main.obj : error LNK2001: 
 外部シンボル "__imp__OutputDebugStringA@4" は未解決です
LIBCD.lib(dbgrpt.obj) : error LNK2001: 
 外部シンボル "__imp__OutputDebugStringA@4" は未解決です
LIBCD.lib(wincrt0.obj) : error LNK2001: 
 外部シンボル "__imp__GetModuleHandleA@4" は未解決です
...

 kernel32.lib は Win32API には必須のライブラリファイルだからね
これを無効にしたらこうなっちゃうわけね
【デフォルト ライブラリをすべて無視】は全ライブラリを無視するから
同じような感じになります
使わないねこれも
【明示的に参照するシンボル】は、関数やグローバル変数が最適化で削除
されないようにするもの
使ってないのだと削除されるってこと?
そういうこと。その削除をさせなくするのがこの設定だから、逆に言うと
最適化をしなかったら意味がないってこと
これも使わないわけね
最後の【追加ライブラリのパス】はおなじみのだね
 Version 15.07 ( No.307 ) のだね
この設定と【オブジェクト/ライブラリ モジュール】の組み合わせで、
ライブラリファイルを指定します
次は【カスタマイズ】ページね
【インクリメンタル リンクを行う】は Version 15.24 ( No.324 ) のも
のと同じ
デバッグ中にプログラムを修正できるようになるんだよね
そういうこと。とりあえずオンがいいかな
次の【プログラム データベースを使用】って、デバッグに使う.pdb
ファイルのこと?
そう、 Version 15.19 ( No.319 ) で説明したプログラムデータベースの
こと。これをオンにして、【プログラムデータベース名】にファイル名を指
定することで、プログラムデータベースが作られます
これを指定しないと出力されないってことね
次の【出力ファイル名】は【一般】ページのものと同じ
 Exe や DLL を指定するのね。【ターゲットを強制的に出力】って?
これは一部のリンクエラーが発生しても無理矢理 Exe や DLL を出力する
設定
……それってまずくない?
うん、だからこれは指定しない方がいいかな
次の【詳細情報の出力】は?
これは、リンク時の情報が出力されます

リンク中...
Microsoft (R) Incremental Linker Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
DLLTestHard.lib /stack:0x10000000,0x100000 /subsystem:windows 
/verbose /incremental:yes "/pdb:Debug/BuildTest.pdb" /debug 
/machine:I386 "/out:Debug/BuildTest.exe" /pdbtype:sept 
"/libpath:D:\Program\DLLTestHard\Debug" 
".\Debug\Main.obj" 
パス 1 を開始します
/DEFAULTLIB: uuid.lib オプションで処理を行いました
/DEFAULTLIB: LIBCD オプションで処理を行いました
/DEFAULTLIB: OLDNAMES オプションで処理を行いました
ライブラリを検索しています
    D:\Program\DLLTestHard\Debug\DLLTestHard.lib を検索しています:
    D:\Microsoft Visual Studio\VC98\LIB\uuid.lib を検索しています:
    D:\Microsoft Visual Studio\VC98\LIB\LIBCD.lib を検索しています:
      __chkesp が見つかりました
        Main.obj で参照されています
        LIBCD.lib(chkesp.obj) をロードしました
      _WinMainCRTStartup が見つかりました
...
ライブラリの検索が終了しました
パス 1 が終了しました
パス 2 を開始します
     Main.obj
     LIBCD.lib(_freebuf.obj)
...
パス 2 が終了しました

……なんかすっごく長いんだけど
リンクはいろんなライブラリファイルを参照するから、これだけの情報が
出力されるんだよね。どういったライブラリファイルを参照して、どの関数
と結び付けているのか、っていうのを確認するときには便利かな
それ以外はオフね
【開始メッセージを表示しない】は、【C/C++】のと同じ
じゃあリンクするときの設定とかが出力されるんだ
そういうこと

Microsoft (R) Incremental Linker Version 6.00.8447
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
DLLTestHard.lib /stack:0x10000000,0x100000 /subsystem:windows 
/incremental:yes "/pdb:Debug/BuildTest.pdb" /debug /machine:I386 
"/out:Debug/BuildTest.exe" /pdbtype:sept 
"/libpath:D:\Program\DLLTestHard\Debug" 
".\Debug\Main.obj" 

こういうのが最初に出力されるわけね
特に必要なければオンで
次が最後のページね
【デバッグ】ページでは、その名の通りデバッグ用の情報を出力します
デバッグ用の情報、って、プログラムデータベースじゃないの?
そう、そのファイルの種類についての設定をここでします。まず、
【デバッグ情報】のチェックをオフにすると、デバッグ用のファイルが出力
されません
.pdbファイルが作られないわけね
っていうわけじゃないんだよね。その下の3つは、出力するファイルの種
類。一番上の【Microsoft フォーマット】がプロジェクトデータベース
これを選ぶと.pdbファイルが作られるわけね
その下の【COFF フォーマット】っていうのを選ぶと、.asmファイルが作
られます。これは Visual C++ 以外の開発環境でデバッグするときに使用し
ます
他でデバッグなんてできるんだ
もちろん。ちなみに【COFF】は【Common Object File Format】の略。こ
の.asmファイルの中身はこんな感じになっています

    TITLE   D:\Program\BuildTest\Main.cpp
    .386P
include listing.inc
if @Version gt 510
.model FLAT
else
_TEXT   SEGMENT PARA USE32 PUBLIC 'CODE'
_TEXT   ENDS
(略)
    rep stosd

; 14   :    OutputDebugString( "あいうえお\n" );

    mov esi, esp
(略)
    ret 16                  ; 00000010H
_WinMain@16 ENDP
_TEXT   ENDS
END

あ、なんだかプログラムらしきものが!
 OutputDebugString() がある行の左、【14】っていうっていう数字は
行番号です
なるほど、デバッグ用のファイルっぽいね
まぁ結局、 Visual C++ で開発してるときには必要ないかな。一番下の
【両方のフォーマット】を選ぶと、.pdbファイルと.asmファイルの両方が出
力されます
まさに両方ね
【他の種類】は、プログラムデータベースに保存する情報を分散するか
ひとつにまとめるかを決めます。チェックをオンにすると、.pdbファイルの
ファイルサイズが変わるから見てみて
ん、チェック外してリビルド……あ、ファイルサイズが大きくなった
なので、これはオンにしておいた方がいいかな
最後の【MAP ファイルを生成する】は?
その名の通り、.mapファイルを生成します。隣のファイル名を指定する欄
で指定したファイル名で、こんな感じのファイルが作られます

 BuildTest

 Timestamp is 4336f2bb (Mon Sep 26 03:55:55 2005)

 Preferred load address is 00400000

 Start         Length     Name                   Class
 0001:00000000 000108e6H .text                   CODE
 0001:000108e6 0001000aH .textbss                CODE
(略)
 0004:00000268 000004f4H .idata$6                DATA

  Address         Publics by Value              Rva+Base     Lib:Object

 0001:00000010       _WinMain@16                00401010 f   Main.obj
(略)
 0004:00000210 __imp__CloseHandle@4       0042a210 kernel32:KERNEL32.dll
 0004:00000214 \177KERNEL32_NULL_THUNK_DATA 0042a214 kernel32:KERNEL32.dll

 entry point at        0001:000000b0

なんだかところどころ見たことのあるようなのが……
【_WinMain@16】とか、【@】が付いているのは Version 15.15 ( No.315 ) 
で説明したでしょ
あ! そうだ、エクスポートしたときの関数名がこんな感じだったね
そういうこと。このファイルを見ると、どんな関数が作られたのか、って
いうのが分かるから
……それだけ?
そう、それだけ

/*
    Preview Next Story!
*/
やっとリンク編も終わった……
次はその他の設定について
? もしかして次回で DLL 編は最後?
それはまだないしょ
ないしょって……
というわけで次回
< Version 15.26 プロジェクトの設定その他 >
につづく!
意訳すると、まだ未定……
ああやっぱり……
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。