2017年05月

2017年05月27日

vs2017でのboost ビルド時エラー

vs2017 でboost1.64.0 をビルドしようとしたときに所々でエラーが出たのでその時のメモです。

環境

ツールまわり

  • visual studio 2017
  • Windows Kits 10.0.15063.0

実行環境

x86 Native Tools Command Prompt for VS 2017 を管理者権限にて実行

bootstrap.bat から呼び出される %boost_root%/tools/build/src/engine/build.bat には次のように書いてありました。

If you have Visual Studio 2017 installed you will need to build from
the Visual Studio Command Prompt for VS 2017 as we where unable to
detect your toolset installtion.

エラー

ことの始まりはbootstrap.bat を動かしたときの次のエラーでした。

execnt.c(57): fatal error C1083: include ファイルを開けません。'tlhelp32.h':No such file or directory

ということで、b2.exe とかbjam.exe が作られませんでした。

tlhelp32.h

tlhelp32.h 自体のことについては置いておいて、見つからないと言われるので適当なプロジェクトでインクルードしてみると、

C:\Program Files (x86)\Windows Kits\8.1\Include\um\TlHelp32.h

にあるとのこと。あるじゃん…
それはそうと、Prompt 上のインクルードパスを調べたところ、Windows Kits は8.1 ではなく10系列が設定されていました。

C:\Program Files (x86)\Windows Kits\10\include\10.0.15063.0\...

上記ディレクトリ以下でtlhelp32.h があるか確認したところ、ありませんでした。それじゃあ見つからないと言われるのも仕方がないですね。

visual studio 2017 を最初に入れた時にWindows Kits は10.0.14393.0 が入っていたのでそちらを確認するとファイルはあったのでどうにか14393を使うようにしたところb2.exe とかbjam.exe が作られました。

エラーは続くよ

そのあとboost をビルドしようとすると、winsock2 のインクルードでやっぱりWindows Kits は10.0.15063.0 のディレクトリを参照しようとしました...

オチ

さいごに、初心に戻ってインストーラをまた立ち上げてみたところデスクトップC++x86およびx64用 Windows 10 SDK (10.0.15063.0) がチェックついてませんでした…
チェックつけてやり直したらうまくいったので、もし同じ困り方をしたらこのコンポーネントがちゃんと入っているかチェックしてみてください。

全部ちゃんとインストールしてたと思ったのに哀しかったです...



rabbitcats at 12:01|PermalinkComments(0)TrackBack(0)C++ | ソフトウェア

2017年05月22日

LoL のping 問題

LoL をプレイしていてping やラグがひどかったときにちょっと調べる方法です。

症状

日本鯖で主に起きていたことは次の2つでした。

  • ping が急に遅くなる 普段は20[ms] くらいなのですがひどいときは1000[ms] くらいになることがありました。 やっている感じだと、急にping が遅くなるので何も反応ができなかったです。

  • 入力を受け付けない ping は遅くないのに急に何も反応しなくなりました。数秒間コマンドを受け付けてくれないのでお亡くなりにばかりなってしまいました。

これらは日本鯖で起きることでNA鯖では起きていません(ping も160[ms] 近辺で安定)。

ツール

いつも日本鯖でしか起きていないので相性の問題かなと思っていましたが、いつもよりひどくなったので調べてみたら次の2つのツールが公式にありました。

最初はこっちでログを読み込んでみましたが、たまにFPS の低下があるくらいでほとんど問題は起きていないようでした。

lol_ping

次にこっちで調べてみると、ping の低下とパケットロスの多発が見て取れました。当然パケットロスが起こればコマンドも受け付けないのも納得です。

原因

結局何が原因だったかというと、パケットロスはプロバイダにお電話したら変な電波が出てる装置が障害を引き起こしてるとの話(何を言っているのでしょうか…)。 とりあえず対応しに向かってるとのことだったので、ちょっと待っていたら無事パケットロスは解決しました。

ただ、日本鯖でping が急に遅くなる問題は結局解決しないままでした。 とりあえずNA鯖でなるべく遊ぶようにすればいいかなと思ってしまいますね。



rabbitcats at 01:00|PermalinkComments(0)TrackBack(0)デジタルゲーム | コンピュータ

2017年05月18日

locale でのDEBUG_NEW によるコンパイルエラー

std::locale を使ってifstream でUTF-8 文字コードのファイルを読み込む設定をした際にコンパイルエラーに遭遇したので、覚書として書きます。

コンパイラ

VC10 (Visual Studio 2010 Professional sp1)

起こったこと

次のコードをコンパイルしたときに、環境を変えるとコンパイルが通ったり通らなかったりしました。

コード

#include <codecvt>
#include <fstream>

...

std::wifstream ifs;
ifs.imbue(std::locale(std::locale::empty(), new sd::codecvt_utf8<wchar_t>));

エラー

UTF-8 locale in Visual C++ 2010 にあるのと同じエラーが出たので引用します。

error C2661: 'std::locale::facet::operator new' : no overloaded function takes 3 arguments
error C2664: 'std::locale::locale(const char *,std::locale::category)' : cannot convert parameter 1 from 'std::locale' to 'const char *'

回避方法

リンク先にあるようにdebug 時にDEBUG_NEW を使わせないように下記のようにコードを変更すれば回避はできました。

ifs.imbue(std::locale(std::locale::empty(), ::new sd::codecvt_utf8<wchar_t>));

new をグローバルスコープを付けてDEBUG_NEW を使わせないように変更。
ただし、回避はできても根本的な解決には至っていないのでどうにか原因を突き止めたいです。

ちなみに自分の使っている計算機はハードディスク周りが不調なのでそっちが原因なのかなとも思いましたが、VS2010 をクリーンインストールした直後にコンパイルエラーになってしまったのでますます不思議です。



rabbitcats at 00:59|PermalinkComments(0)TrackBack(0)C++