リンクエラー _MSC_VER の不一致

1,949 views
Skip to first unread message

kei...@gmail.com

unread,
Aug 28, 2015, 4:19:41 AM8/28/15
to IP Messenger掲示板
はじめまして。

VS2012 で ipmsg342r2src をビルドしてみましたところ、

1>taskbarui.obj : error LNK2038: '_MSC_VER' の不一致が検出されました。値 '1500' が 1700 の値 'cfg.obj' と一致しません。
1>Release/IPMsg.exe : fatal error LNK1319: 1 の不一致が検出されました

というエラーが出ます。 解決策を教えていただけますでしょうか?

Hiroaki SHIROUZU

unread,
Aug 28, 2015, 12:16:12 PM8/28/15
to IP Messenger掲示板
リビルドするか、現在、taskbarui は事実上使っていないので、プロジェクトから当該ファイルを消してビルドすると良いかもしれません。

keides2

unread,
Aug 30, 2015, 11:01:10 PM8/30/15
to IP Messenger掲示板
リビルドしても結果は同じでした。 (コンパイル済みobjをリンクしていないので)
taskbarui.cpp をプロジェクトから除外したところ、

6>mainwin.obj : error LNK2019: 未解決の外部シンボル "void __cdecl CreateJumpList(char const *)" (?CreateJumpList@@YAXPBD@Z) が関数 "public: virtual int __thiscall TMainWin::EvCreate(long)" (?EvCreate@TMainWin@@UAEHJ@Z) で参照されました。
6>mainwin.obj : error LNK2019: 未解決の外部シンボル "void __cdecl DeleteJumpList(void)" (?DeleteJumpList@@YAXXZ) が関数 "protected: void __thiscall TMainWin::Terminate(void)" (?Terminate@TMainWin@@IAEXXZ) で参照されました。
6>Release/IPMsg.exe : fatal error LNK1120: 2 件の未解決の外部参照

が出ました。

mainwin.cpp に以下のコードがありましたので taskbarui は使っているようです。

if (IsWin7() && cfg->TaskbarUI) {
DeleteJumpList();
}

if (cfg->TaskbarUI) {
CreateJumpList(className);
}

taskbarui.cpp の先頭にある _MSC_VER 1500 の定義を削除すればリンクが通りますが、何か影響が出ますでしょうか?

#if 0         // リンクエラー対策
#undef _MSC_VER
#define _MSC_VER 1500
#endif      // リンクエラー対策

Hiroaki SHIROUZU

unread,
Aug 31, 2015, 4:12:34 AM8/31/15
to IP Messenger掲示板
最新 v3.52 のソースをお使いください。
こちらでは taskbarui は #ifdef で無効化されてあるはずです。

keides2

unread,
Aug 31, 2015, 6:55:10 AM8/31/15
to IP Messenger掲示板
v3.52をビルドしてみました。

taskbarui ですが、本文は #if 0 で無効化されていますが、

#undef _MSC_VER
#define _MSC_VER 1500

は無効化されていませんでしたので、やはり、

3>taskbarui.obj : error LNK2038: '_MSC_VER' の不一致が検出されました。値 '1500' が 1700 の値 'cfg.obj' と一致しません。
3>Debug\IPMsg.exe : fatal error LNK1319: 1 の不一致が検出されました

が出ます。

また、uninst.cpp の TUninstDlg()関数に、

runasWnd = (HWND)strtoull(p + 6, 0, 16);

error C3861: 'strtoull': 識別子が見つかりませんでした

が出るようになりました。 strtoul の間違いではないでしょうか?

Hiroaki SHIROUZU

unread,
Aug 31, 2015, 7:00:12 AM8/31/15
to IP Messenger掲示板
mainwin.cpp側で、taskbaruiを呼ばないように#if 0 になっているはずなので、taskbarui.cppを削除しても大丈夫になっているはずです。

それから strtoull はlong long用の関数です。

keides2

unread,
Sep 1, 2015, 5:10:50 AM9/1/15
to IP Messenger掲示板
何度も済みません。

taskbarui.cpp をプロジェクトから除外して、install.exe と、IPMsg.exe は生成できました。

が、uninst.cpp では、
1>uninst.cpp(55): error C3861: 'strtoull': 識別子が見つかりませんでした
が出ます。

VS2012 の stdlib.h に strtoull はないようです。 (VS2013 からあり)

Hiroaki SHIROUZU

unread,
Sep 1, 2015, 10:39:53 AM9/1/15
to IP Messenger掲示板
v3.52 はソースアーカイブのreadme-j.txtにも書いてある通り、VS2013以降でのビルドを前提にしたコードなので、
VS2012の場合は、適宜、変更などを入れると良いでしょう。

keides2

unread,
Sep 2, 2015, 3:54:14 AM9/2/15
to IP Messenger掲示板
わかりました。ありがとうございました。
Reply all
Reply to author
Forward
0 new messages