Visual Studio 2017 で net-snmp をビルドすると C1189 / C4005 発生
これまたひょんなことから snmp の trap を受信するプログラムを作らなくては
ならなくなったので、net-snmp を利用すべく格闘をはじめております。

落としたソースからソリューションファイルを変換するのはよかったのですが
最初につっかかったのが...

Visual Studio 2017 で net-snmp のソース(5.7.3)をビルドしようとすると
下記のエラーが大量に出る。

C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\stdio.h(1925):
warning C4005: 'snprintf': マクロが再定義されました。
D:\source\net-snmp-5.7.3\win32\net-snmp/net-snmp-config.h(1648):
note: 'snprintf' の以前の定義を確認してください
C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt\stdio.h(1927):
fatal error C1189: #error: Macro definition of snprintf conflicts with
Standard Library function declaration snmptrapd_handlers.c


残念ながら、ネット上には手掛かりはちょっと落ちてはいたのですが
ぴったりな解決法が無かったので、記しておきます。

具体的には net-snmp-config.h の 1647 行目付近

#ifdef _MSC_VER
#define snprintf _snprintf
#endif


これをちょっと上のソースにあわせてこんな感じで変更してやります。

// #ifdef _MSC_VER
#if defined(_MSC_VER) && _MSC_VER < 1900
#define snprintf _snprintf
#endif


ちなみに、Visual Studio 2017 の _MSC_VER は 1910 になります。
また、net-snmp-config.h 内で別途 _MSC_VER を定義する必要はありません。

これ以外の変更は一切せずに、x64 でコンパイルしても動きました。

【2017/04/28】 技術 | トラックバック(0) | コメント(0) | page top↑
<<Revel埋立:Revel のページと静的 HTML を共存させる。 | ホーム | 我が家の家計 2017/4>>
コメント
コメントの投稿











管理者にだけ表示を許可する

トラックバック
トラックバックURL
http://hidenov.blog4.fc2.com/tb.php/1360-74d82614
| ホーム |