別ファイルで定義した関数を使用するwindows
「C言語によるプログラミング 応用編 第2版」という参考書でCの勉強をしています。
この本は、unix と windows 両方のコンパイラを対象に解説していますが、
私は今 VC++ 2005 に付与される cl.exe と link.exe で勉強を進めています。
( os:WindowsXP home )
下記の(1)のような関数のみを定義したソース内の "snapshot関数"を、
下記の(3)のような他のmain関数を持った実行コードから使用したい場合
コンパイル・リンクのケースで、どんな手順でコンパイル・リンクすればよいのでしょう?
(1) 関数のみを定義した"snapshot.c"
#include <stdio.h>
... 省略 ...
/* エラーmessage , ワーニングmessage , ノーマルmessage を選んで出力する関数 */
int snapshot( int type , char *fmt, ... )
{
... 省略 ...
}
(2) 上の関数定義ファイルのヘッダファイル"snapshot.h"
extern int snapshot( int type , char *fmt, ... );
#define NORMAL 0
#define WARNING 1
#define ERROR 2
(3) 上のsanpshot関数を使用する"use_snapshot.c"
#include <stdio.h>
#include "snapshot.h" /* これで snapshot関数を使用できる */
int main( void )
{
int i = 10;
snapshot( NORMAL, "normal message. %d\n", i );
snapshot( WARNING, "warning message. %d\n", ++i );
snapshot( ERROR, "error message. %d\n", ++i );
return 0;
}
私が、まず(1)の"snapshot.c"のみをコンパイル
>cl /c sanpshot.c
した後、
"snapshot.obj"をリンクしたときのエラーは
添付画像"err_link_snapshot.obj.JPG" です。
この意味もよく分からないのですが、
次に、"use_snapshot.obj" と "snapshot.obj" をまとめてリンクしようとした時のエラーは、下記です。
>link use_snapshot.obj snapshot.obj
snapshot.obj : error LNK2019: 未解決の外部シンボル _vspritf が関数 _snapshot で
参照されました。
use_snapshot.exe : fatal error LNK1120: 外部参照 1 が未解決です。
初歩的な問題かと思いますが、どなたかこの解決法を
ご教示いただけないでしょうか?
参考サイトなども教えていただけると有難いと思います。
よろしくお願いします。
お礼
詳しい回答ありがとうございました。勉強になります。