ここから本文です

KernelBase.dllについてお聞きしたいことがあります。

chi********さん

2013/11/1618:52:10

KernelBase.dllについてお聞きしたいことがあります。

プログラム初心者です。
cv::CalibrateCamera();を実装しようと思い、試しに下記のサンプルコードを動かしてみることにしました。

URL→https://github.com/daviddoria/Examples/blob/master/c%2B%2B/OpenCV/C...

私はopencv2.4.2とC++2010expressを使用しています。

インクルード部分(サンプルコードの1行目~8行目)を

#include "stdafx.h"
#include <opencv2/opencv.hpp>

#pragma comment (lib,"opencv_core242d.lib")
#pragma comment (lib,"opencv_imgproc242d.lib")
#pragma comment (lib,"opencv_calib3d242d.lib")
#pragma comment (lib,"opencv_highgui242d.lib")


#include <iostream>
#include <string>
#include <vector>

に書き換えました!(同サイトのsolvePnP.cxxというサンプルコードでも同様の書き換えで成功したので)

こうするとビルドは通るのですが、サンプルコードの50行目の cv::CalibrateCamera(); の位置で、
「 ハンドルされていない例外が発生しました: Microsoft C++ の例外: cv::Exception 」
というエラーらしきウインドウが表示され、

呼び出し履歴を見てみると
「 下のフレームは間違っているか、または見つかりません。kernelBase.dll に対して読み込まれたシンボルはありません。 」
と出ていました。

下のフレームというのはこのメッセージの下の欄に書いてあった
「 KernelBase.dll!75c9969b() 」
「 opencv_core242d.dll!005d60cc() 」
の事だと思われるのですが、これはどういったエラーなのでしょうか??

KernelBase.dllについて調べてみましたが、サイトからダウンロードしていれてみても解決できなかったという記述が多く見られました。

どのようにすれば解決できると思われますか???

ご教授いただけるととてもうれしいです!!

<(_ _)>

閲覧数:
23,352
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

n2q********さん

2013/11/1817:24:48

(1)このエラーは何?

これは確かに初心者の方には難しい。でも C/C++ ではよくあることなんですよね。早速ご説明しましょう。

「 下のフレームは間違っているか、または見つかりません。kernelBase.dll に対して読み込まれたシンボルはありません。 」

フレームって、いきなり専門用語ですね。スタックフレームのことでしょう。デバッガが表示する関数の呼び出し経路というのは、ある意味、想像を含んでいるわけです。当たらない場合もある。呼ばれている関数の仕様がよくわかっていると良いんだけど、そうでない場合は Visual C++ のデバッガとしても困る。で、どうもうまい具合に呼び出しの履歴を表示できていないのですよ、とほほ、という趣旨のメッセージを表示しているのです。

このようなメッセージが表示された場合、上級者は「読み込まれたシンボルはありません」に着目します。「シンボル」というのは簡単に言えば関数名。シンボルを加えてやれば良いのです。そのための操作法とかもありますけど、でもどうでしょう。初心者の方は混乱するだけかも知れないので、その説明は省略します。

それで、意味合いとしてはですね、このメッセージが出される以前に異常が起きていて、それについて詳しく掘り下げることが出来ませんでしたということです。だから、その前の

「 ハンドルされていない例外が発生しました: Microsoft C++ の例外: cv::Exception 」

が本当のエラー。そこに注意を払えばOKです。

(2)KernelBase.dllって何?

前述の通り、これは気にしなくて良いものなんだけど、でも気になるということがあるのでは?一応、簡単に説明しましょう。Windows の核(kernel)ですよ。大事なものがそこにたくさん詰まっているのです。Windows Vista までだったら、Kernel32.dll ということ。Windows 7 になって、関数の再配置が行われました。それまで Kernel32.dll に入っていた多くの機能が KernelBase.dll に引っ越したわけです。互換性のこともありますので kernel32.dll は残っていますよ。でも、実際の機能はそこに無くて、たいていの場合、KernelBase.dll 内の関数に飛んでいたりするのです。更にその先に、ntdll.dll というものが居るのですけどね。

え、ダウンロードなさったんですか?それは危険ですよ。お使いの Windows のバージョンに密接に絡んでいるものですから、異なるバージョンの KernelBase.dll を持ってきても混乱のもと。傷がさらに深くなってしまいますから。

(3)どうすれば解決できる?

サンプルコードということで、それ自体には、おそらく問題はないのでしょう。とすると、opencv の環境か。それとも…、デバッグ版のライブラリをインポートされているようですが(#pragma comment(lib, ...) の記述群で)、もしかしてリリース版でビルドしていたりしませんか?その辺の不整合があると、この種のエラーが発生します。

あと、思いつくものが無いのですけれども、ともかく KernelBase.dll についてはエラー事象とは無関係だというのを念頭に置いてデバッグをなさると良いというお話でした。

質問した人からのコメント

2013/11/20 16:30:21

降参 初心者でも分かりやすい説明ありがとうございます。
ご指摘の通りリリース版でデバックしていたようで、無事解決しました!

ベストアンサー以外の回答

1〜1件/1件中

liv********さん

2013/11/1703:00:33

KernelBase.dll っていうのは Windows に元々入っている dll で、
KernelBase.dll のシンボル情報(DLLとソースコードの対応づけのようなもの)が見つからない ( 元々 Windows には入っていない ) ので、KernelBase.dll のどこでエラーが起きているのかわからない

ということみたい。

それよりも、コンソール画面に何かエラーメッセージ ( OpenCV Error: ・・・ ) が出力されてると思うので、そちらからエラーの原因を探った方がいいと思うよ。
( データが正しくないんじゃないかという気がするけど・・・ )

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる