[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: Meadow2.00b2のコンパイル



藤井です。

From: Hidefumi Fujimoto <fujimoto@xxxxxxxxxxxxxxx>
Subject: Meadow2.00b2のコンパイル
Date: Mon, 05 Jan 2004 00:32:02 +0900 (JST)
Message-ID: <20040105.003202.01368030.fujimoto@xxxxxxxxxxxxxxx>
> Meadow2.00b2の2003/12/24以降のpatchを当てたソースを
> Microsoft Visual Studio .NET 2003のVC7でコンパイルすると、
> 
> --------------------------
> temacs2.lib(w32.obj) : error LNK2019: 未解決の外部シンボル _ftime が関数 _gettim
> eofday で参照されました。
> obj-spd\i386\temacs.exe : fatal error LNK1120: 外部参照 1 が未解決です。
> NMAKE : fatal error U1077: 'link' : リターン コード '0x460'
> Stop.
> NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio .NET 2003\
> VC7\BIN\nmake.exe"' : リターン コード '0x2'
> Stop.
> --------------------------
> というメッセージを出してコンパイルが止まります。

私のところでも止まりました。(Win2K, VC7.1)
なお、VC 6.0 では無事ビルドできました。(WinXP)

> # libc.libにftimeに相当するシンボルが無いのが原因だとは思いますが、
> # libc.lib内のシンボルを表示させるコマンドを知らないため、確認が出来ておりません。
> # このようなコマンドがあるのでしょうか?

dumpbin コマンドで確認できると思います。

        dumpbin /symbols libc.lib

# ftime() は oldnames.lib にあります。libc.lib にあるのは _ftime() です。

どうしてバージョンによってリンクができたりできなかったりするのか不思議
に思って確認してみたところ、VC 6.0, VC 7.1 それぞれの環境でビルドする
と、

        VC 6.0 では oldnames.lib をリンカの引数に指定する。-> 成功 
        VC 7.1 では oldnames.lib をリンカの引数に指定しない。-> 失敗

といった違いがあるようです。

とりあえず、私のところでも以下のとおりにすれば無事リンクできます。

> src/w32.c内の
>   ftime (&tb);
> を
>   _ftime (&tb);
> に戻すと無事コンパイルが出来ます。

ですが、今後もこのような問題を防ぐためには上記の差異をなくすようにした
方がいいのではないかと思います。

# リンカには -nodefaultlib:oldnames.lib というオプションも指定されてい
# るので、VC 6.0 環境で oldnames.lib がリンカの引数に指定されないよう
# にすべきなんでしょうね。

--
藤井 正行 / Masayuki FUJII ( boochang@xxxxxxxxxxxx )