※ ChatGPTを利用し、要約された質問です(原文:別ファイルで定義した関数を使用するwindows)
C言語によるプログラミング応用編 第2版 | Windowsでの関数使用手順
このQ&Aのポイント
C言語によるプログラミング応用編 第2版の参考書で、Windowsで関数を使用する手順について質問です。
質問者はVC++ 2005に付与されるcl.exeとlink.exeを使用しています。
snapshot.cのみをコンパイルするときに発生するエラーや、snapshot.objをリンクする際のエラーについて質問しています。
「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 が未解決です。
初歩的な問題かと思いますが、どなたかこの解決法を
ご教示いただけないでしょうか?
参考サイトなども教えていただけると有難いと思います。
よろしくお願いします。
お礼
ご回答ありがとうございます コンパイルエラーをちゃんと見てみましたら、 (1)のソースコード内で、vsprintf関数を vspritf と書いてしまっていました。 修正後、 >link use_snapshot.obj snapshot.obj でリンクが成功しました。 ご迷惑を掛けましてすみませんでした。 でも、このようなQ&Aサイトがあるお陰で、 精神的に重くならず勉強ができます。 本当にありがとうございました。