ページ 1 / 1
ucrtbased.dllの例外について
Posted: 2017年8月23日(水) 15:47
by ottutama
こんにちは、先ほどなぜかopencvのbinファイルがなくなっていたので入れ直してコンパイルしてみたところ、
例外が発生しました。
対処法も探した限りわかりませんでしたので、お力を貸してください。
例外のメッセージは以下の通りでした。
により ハンドルされない例外が 0x00007FFCEE606DC0 (ucrtbased.dll) で発生しました(●●.exe 内): 0xC000001D: Illegal Instruction。 が発生しました
ここが問題だぞと指摘されたコードはinternal_shared.hの以下の通りです。
コード:
template <typename Result>
struct __crt_seh_guarded_call
{
template <typename Setup, typename Action, typename Cleanup>
auto operator()(Setup&& setup, Action&& action, Cleanup&& cleanup) throw()
-> decltype(action())
{
decltype(action()) result{};
setup();
__try
{
result = action();
}
__finally
{
cleanup();
}
return result;
}
};
Re: ucrtbased.dllの例外について
Posted: 2017年8月23日(水) 15:48
by ottutama
失礼しました。上記コードのresult = action();の部分です。
Re: ucrtbased.dllの例外について
Posted: 2017年8月23日(水) 16:57
by asd
ottutama さんが書きました:こんにちは、先ほどなぜかopencvのbinファイルがなくなっていたので入れ直してコンパイルしてみたところ、
例外が発生しました。
対処法も探した限りわかりませんでしたので、お力を貸してください。
例外のメッセージは以下の通りでした。
により ハンドルされない例外が 0x00007FFCEE606DC0 (ucrtbased.dll) で発生しました(●●.exe 内): 0xC000001D: Illegal Instruction。 が発生しました
ここが問題だぞと指摘されたコードはinternal_shared.hの以下の通りです。
コード:
template <typename Result>
struct __crt_seh_guarded_call
{
template <typename Setup, typename Action, typename Cleanup>
auto operator()(Setup&& setup, Action&& action, Cleanup&& cleanup) throw()
-> decltype(action())
{
decltype(action()) result{};
setup();
__try
{
result = action();
}
__finally
{
cleanup();
}
return result;
}
};
環境(OS、VisualStudio、言語)も書かれておらず、利用しているOpenCVも不明なのでエラーメッセージで検索したことによる推測ですが、
ビルドしているexeのプラットフォームと入れなおしたOpenCVは同じ32bit向けか64bit向けでそろっているでしょうか?
OpenCVが64bit版なのにWin32プラットフォームでビルドしている場合に同様の例外が出る場合があるようです。
そこが問題なかった場合には環境や利用しているOpenCV、OpenCVの入れなおし手順、利用しようとしているOpenCVの関数か現象が再現するソースなどを補足いただけると
原因究明の一助となるかもしれません。
Re: ucrtbased.dllの例外について
Posted: 2017年8月23日(水) 17:08
by ottutama
そうですね、環境を書くのを忘れていました。
OS:windows10
使用ソフト:visual studio2017
言語:c++
ライブラリ:win32api 、 opencv3.3
プラットフォーム:x64
プラットフォームツールセット:(visual studio2015)v140
です
追加のライブラリディレクトリのパスはopencv\build\x64\vc14\lib
で通しています
Re: ucrtbased.dllの例外について
Posted: 2017年8月23日(水) 17:21
by ottutama
Opencvは公式サイト様のWin Packからダウンロードし、それを使用しています。
コードにつきましては、WinMain関数内にも入れないです
インクルードしているファイルは以下の通りです。
コード:
#include <stdlib.h>
#include <windows.h>
#include <commctrl.h>
#include <tchar.h>
#include <opencv2/opencv.hpp>
Re: ucrtbased.dllの例外について
Posted: 2017年8月23日(水) 18:21
by ottutama
追加情報です。
パソコンを再起動してまたプロジェクトを開いたところvisualstudio内にシンボルが読み込まれていませんという子ウィンドウが出てきました。
なかは「ucrtbased.pdbは読み込まれていません」とモジュール情報と
いずれかのオプションを試しますと書かれていました
いずれかのオプションを試しますと書かれていた下に「PDBとバイナリの既存の検索パスを変更してやり直す」と文字で書かれており
その下にMicrosoft Symbol Serversという項目名のボタンがありました
Re: ucrtbased.dllの例外について
Posted: 2017年8月23日(水) 21:52
by asd
ottutama さんが書きました:追加情報です。
パソコンを再起動してまたプロジェクトを開いたところvisualstudio内にシンボルが読み込まれていませんという子ウィンドウが出てきました。
なかは「ucrtbased.pdbは読み込まれていません」とモジュール情報と
いずれかのオプションを試しますと書かれていました
いずれかのオプションを試しますと書かれていた下に「PDBとバイナリの既存の検索パスを変更してやり直す」と文字で書かれており
その下にMicrosoft Symbol Serversという項目名のボタンがありました
情報の補足ありがとうございました。
プロジェクトを開いた時点で子ウィンドウが表示されたとのことなので、問題の切り分けを行う感じでしょうか。
(直接的な解決策でなくて申し訳ありません)
1.新しくプロジェクトを作りOpenCVを使わない状態でビルド、実行できるか?
2.1のプロジェクトでOpenCVを使うようにしてビルド、実行できるか?
3.問題の発生しているプロジェクトでOpenCVを使わない状態でビルド、実行できるか?
1で問題なくビルド、実行できるのであればVisualStudio2017の実行環境には問題はなさそうです。
2で問題なくビルド、実行できるのであればOpenCVについても問題はなさそうです。
この時点で新しく作り直したプロジェクトにコード等を移してしまう手もありかもですね。
3はおまけの確認になりますが、これがビルド、実行できるのであれば1と2は問題ない状態のはずなので
問題の発生しているプロジェクトでOpenCVを使った場合だけうまく動かないということになります。
もし1でもエラーになった場合はVisualStudio2017の環境にも問題があるかもなので、再インストールができれば試してみてもよいかもしれません。
2でエラーになった場合にはOpenCVに問題があるのでそのあたりに原因を絞り込んで確認することになるかと思います。
ちなみにいつのまにかOpenCVのbinが消えていたとのことでしたが、それが消える前は今と同じOpenCVのバージョンを使って
同じような設定で問題なく動いていたのでしょうか?
Re: ucrtbased.dllの例外について
Posted: 2017年8月23日(水) 22:07
by Math
OpenCV3.3.0 --- x64 Native Tools Command Prompt for VS 2017 で実行してみたが正常でした。
http://dixq.net/forum/viewtopic.php?f=3&t=19429 を参照してください。[OpenCVのVer. 2.4.11.0]と同様に設定DxLibとCV 2画面正常…
g.bat
g.mak
コード:
TARGETNAME=g1
C_FLAGS=/c /TP /EHsc /D "_MBCS" /MT /Id:\dxlib /Id:\cv330 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /W3
LINK_FLAGS=/SUBSYSTEM:WINDOWS /LIBPATH:d:\dxlib "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" d:\cv330\opencv_world330.lib
ALL:
cl $(C_FLAGS) $(TARGETNAME).cpp
link /out:$(TARGETNAME).exe $(LINK_FLAGS) $(TARGETNAME).obj
$(TARGETNAME).exe
g1.cpp
コード:
#include "DxLib.h"
#include <opencv2/opencv.hpp>
#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <commctrl.h>
#include <tchar.h>
#include <opencv2/opencv.hpp>
// プログラムは WinMain から始まります
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 幅320px、高さ240pxで赤色の画像データを生成
cv::Mat redImg(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 255));
// 画像表示用のウィンドウを生成
cv::namedWindow("red", cv::WINDOW_AUTOSIZE);
// ウィンドウに画像を表示
cv::imshow("red", redImg);
/* DxLib */
ChangeWindowMode( TRUE ); // ウィンドウモード
DxLib_Init(); // DXライブラリ初期化
DrawString(30, 20, "DxLib: Hello World!", GetColor(255, 255, 255)); // 文字を書く
WaitKey(); // キー入力があるまで待機
DxLib_End(); // DXライブラリ終了処理
/* DxLib */
// キー入力を待機
cv::waitKey(0);
// 作成したウィンドウを全て破棄
cv::destroyAllWindows();
return 0;
}
x64 Native Tools Command Prompt for VS 2017 で実行
コード:
D:\z17c\cpp\cv330>g
D:\z17c\cpp\cv330>nmake -f g.mak
Microsoft(R) Program Maintenance Utility Version 14.10.25019.0
Copyright (C) Microsoft Corporation. All rights reserved.
cl /c /TP /EHsc /D "_MBCS" /MT /Id:\dxlib /Id:\cv330 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /W3 g1.cpp
Microsoft(R) C/C++ Optimizing Compiler Version 19.10.25019 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
g1.cpp
link /out:g1.exe /SUBSYSTEM:WINDOWS /LIBPATH:d:\dxlib "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" d:\cv330\opencv_world330.lib g1.obj
Microsoft (R) Incremental Linker Version 14.10.25019.0
Copyright (C) Microsoft Corporation. All rights reserved.
g1.exe
D:\z17c\cpp\cv330>

Re: ucrtbased.dllの例外について
Posted: 2017年8月23日(水) 22:22
by Math
>解決しました!
>原因はopencv3.0以降とopencv2.4.11だとリンクするライブラリが違く
>(opencv3.0だとopencv_worldを追加の依存ファイルに入れればよかった)
>opencv3.0で2.4.11の設定(または逆)をしていたので手順が正しくてもずっとリンクエラーが出ていた模様です。
その方は(opencv3.0だとopencv_worldを追加の依存ファイルに入れればよかった)といっておられます。
OpenCV3.3.0の場合
opencv_world330を追加の依存ファイルに入れましたでしょうか。
Re: ucrtbased.dllの例外について
Posted: 2017年8月23日(水) 22:32
by Math
[訂正]opencv_world330.lib と拡張子もいるはずですね。
Re: ucrtbased.dllの例外について
Posted: 2017年8月23日(水) 22:53
by Math
OpenCV3.3の設定をどのようにされたか教えてください。 他の方がいわれるように問題点はVisualStudioの設定にあってOpenCV3.3の問題だけではないとおもわれますね。ucrtbase.dll---ユニバーサルCランタイムDLLはOpenCVとは直接は関係ないですものね。
Re: ucrtbased.dllの例外について
Posted: 2017年8月24日(木) 00:05
by ottutama
公式サイト様のダウンロードページからWin Packをダウンロードしました。
visual studio内での設定は
追加のインクルードライブラリにopencv\build\include
追加のライブラリにopencv\build\x64\vc14\lib
システムの環境変数のPathにopencv\build\x64\vc14\bin
追加の依存ファイルにデバッグの時はopencv_world330d.libリリースの時はopencv_world330.lib
と設定しました。
また、コンパイルしたら例の子ウィンドウが現れ、
Microsoft Symbol Serversという項目名のボタンにチェックを入れてまたコンパイルしますと
一番初めのエラーが起きるという状態です。
Re: ucrtbased.dllの例外について
Posted: 2017年8月24日(木) 00:06
by ottutama
最初から出るというのはおそらく、前のデータが残ってたのでそう見えただけのようです。
実際にはコンパイルしますと現れます。
Re: ucrtbased.dllの例外について
Posted: 2017年8月24日(木) 06:41
by Math
肝心のprojectがWin32Consoleかどうかと、それと”全コードを提示”していただかないと分かりませんね?。
まずコードはエラーなく(波線などなく)正常に表示されているのでしょうか?。
Re: ucrtbased.dllの例外について
Posted: 2017年8月24日(木) 07:36
by Math
Windows10、VS2007Community、Win32Console で問題なく実行できますね。
コード:
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
int
main(int argc, char *argv[])
{
// 初期化時に塗りつぶす
cv::Mat red_img(cv::Size(640, 480), CV_8UC3, cv::Scalar(0, 0, 255));
cv::Mat white_img(cv::Size(640, 480), CV_8UC3, cv::Scalar::all(255));
cv::Mat black_img = cv::Mat::zeros(cv::Size(640, 480), CV_8UC3);
// 初期化後に塗りつぶす
cv::Mat green_img = red_img.clone();
green_img = cv::Scalar(0, 255, 0);
cv::namedWindow("red image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
cv::namedWindow("white image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
cv::namedWindow("black image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
cv::namedWindow("green image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO);
cv::imshow("red image", red_img);
cv::imshow("white image", white_img);
cv::imshow("black image", black_img);
cv::imshow("green image", green_img);
cv::waitKey(0);
}
コード:
1>------ ビルド開始: プロジェクト: opencv330, 構成: Debug x64 ------
1>g1.cpp
1>opencv330.vcxproj -> D:\z17\opencv33\opencv330\x64\Debug\opencv330.exe
1>opencv330.vcxproj -> D:\z17\opencv33\opencv330\x64\Debug\opencv330.pdb (Partial PDB)
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
Re: ucrtbased.dllの例外について
Posted: 2017年8月24日(木) 07:38
by Math
「訂正」Windows10、VS2017Community、Win32Console で問題なく実行できますね。
Re: ucrtbased.dllの例外について
Posted: 2017年8月24日(木) 07:42
by Math
Re: ucrtbased.dllの例外について
Posted: 2017年8月24日(木) 07:52
by Math
>また、コンパイルしたら例の子ウィンドウが現れ、
>Microsoft Symbol Serversという項目名のボタンにチェックを入れてまたコンパイルしますと
>一番初めのエラーが起きるという状態です。
こうゆうものは全く出ないですね?。
Re: ucrtbased.dllの例外について
Posted: 2017年8月24日(木) 10:30
by asd
連投で埋もれてしまっていますが、切り分けは試してみましたでしょうか?
http://dixq.net/forum/viewtopic.php?f=3&t=19502#p147472
当該の例外はOpenCV利用に限らず発生することもあるようです。
(参考)
https://teratail.com/questions/70313
プロジェクト一式の提供は特定のプロジェクトでのみ発生しているのか、OpenCVを使うと発生するのか、環境依存なのかの切り分けを行ってからでも遅くはないと思います。
オフトピック
不必要に連投されるとほかの方のレスが埋もれてしまうので、落ち着いて推敲してから投稿してもらいたいと思います。
Re: ucrtbased.dllの例外について
Posted: 2017年8月24日(木) 10:48
by Math
>公式サイト様のダウンロードページからWin Packをダウンロードしました。
>visual studio内での設定は
>追加のインクルードライブラリにopencv\build\include
>追加のライブラリにopencv\build\x64\vc14\lib
>システムの環境変数のPathにopencv\build\x64\vc14\bin
>追加の依存ファイルにデバッグの時はopencv_world330d.libリリースの時はopencv_world330.lib
>と設定しました。
設定はこれだけでおなじではありますね。(Win32Consoleプロジェクト上で)
Re: ucrtbased.dllの例外について
Posted: 2017年8月24日(木) 17:27
by ottutama
以下のコードでコンパイルしたところ、同じ症状が現れました
コード:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
LPSTR lpsCmdLine, int nCmdShow)
{
}
Re: ucrtbased.dllの例外について
Posted: 2017年8月24日(木) 20:55
by asd
ottutama さんが書きました:以下のコードでコンパイルしたところ、同じ症状が現れました
コード:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,
LPSTR lpsCmdLine, int nCmdShow)
{
}
切り分けをしていただいたようでありがとうございました。
OpenCVを使わずに同じ症状が現れているのであれば、OpenCVが悪さをしているわけではなさそうですね。
ちなみに上のコードは新しくプロジェクトを作って確認したのでしょうか?
もし新しいプロジェクトを作って症状が現れたのだとしたら、VisualStudio2017に原因がある気もするので
一度VisualStudio2017を再インストールしてみるのはどうでしょうか?
新しいプロジェクトを作っていない場合には新しいプロジェクトを作成して確認してみてください。