そのため、Mingw でコンパイルされた C++ dll を msvc プロジェクトに追加する際に問題が発生しています。一部の人々が持っていると思われるリンクに関する問題を修正しましたが、追加したdllで関数を呼び出すと、「アクセス違反読み取り場所0x00000014」エラーが発生し、new.cppのオペレーターnewメソッドで中断します(ビジュアル スタジオ 2010)。メモリ管理とは別の違いがあることを読んだことがありますが、それが私の問題の原因ではないかと考えていました。
私がビルドして実行しようとしている特定の dll は、https: //code.google.com/p/cvblob/ で入手できる cvBlobsです。何らかの理由で、mingw でコンパイルすると、何倍も高速になります。
私はこれらのことにかなり慣れていませんが、mingw dll が msvc new() メソッドを呼び出していることが問題なのだろうかと思っていました。それは理にかなっていますか?私はmingwサイトのヘルプを見ましたが、それは私をこの時点に導くのに役立ちましたが、この問題に対処するのに役立たないようです. 他に提供してほしいものがあれば教えてください。
編集: Visual Studio でコンパイルされたコードから、問題のある特定のコードを含めました。
//Grey is a greyscale image, thresh is that image thresholded
cvThreshold(grey,thresh,0,255,CV_THRESH_OTSU);
IplImage* outputImg = cvCreateImage(cvGetSize(thresh), IPL_DEPTH_LABEL, 1);
//Blobs is where the found blobs are outputted too
cvb::CvBlobs blobs;
unsigned int result;
//This is the problematic method, it is in the mingw compiled dll,
//other methods from this dll seem to work. I'm tempted to say that
//the problem comes in the cvLabel method, where a varible "CvBlob blob" is
//first initalized. This is due to the stack trace that I am including
//under this edit
result = cvb::cvLabel(thresh, outputImg, blobs);
これが私が上で言及したスタックトレースです
cvBlobs.dll!6e313f95()
[Frames below may be incorrect and/or missing, no symbols loaded for cvBlobs.dll]
cvBlobs.dll!6e30135b()
msvcr100d.dll!operator new(unsigned int size) Line 59C++
nuon.dll!std::_Allocate<std::_Tree_nod<std::_Tmap_traits<unsigned int,cvb::CvBlob *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,cvb::CvBlob *> >,0> >::_Node>(unsigned int _Count, std::_Tree_nod<std::_Tmap_traits<unsigned int,cvb::CvBlob *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,cvb::CvBlob *> >,0> >::_Node * __formal) Line 36 + 0x15 bytes C++
nuon.dll!std::allocator<std::_Tree_nod<std::_Tmap_traits<unsigned int,cvb::CvBlob *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,cvb::CvBlob *> >,0> >::_Node>::allocate(unsigned int _Count) Line 187 + 0xb bytes C++
nuon.dll!std::_Tree_val<std::_Tmap_traits<unsigned int,cvb::CvBlob *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,cvb::CvBlob *> >,0> >::_Tree_val<std::_Tmap_traits<unsigned int,cvb::CvBlob *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,cvb::CvBlob *> >,0> >(const std::less<unsigned int> & _Parg, std::allocator<std::pair<unsigned int const ,cvb::CvBlob *> > _Al) Line 550 + 0xc bytes C++
nuon.dll!std::_Tree<std::_Tmap_traits<unsigned int,cvb::CvBlob *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,cvb::CvBlob *> >,0> >::_Tree<std::_Tmap_traits<unsigned int,cvb::CvBlob *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,cvb::CvBlob *> >,0> >(const std::less<unsigned int> & _Parg, const std::allocator<std::pair<unsigned int const ,cvb::CvBlob *> > & _Al) Line 699 C++
nuon.dll!std::map<unsigned int,cvb::CvBlob *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,cvb::CvBlob *> > >::map<unsigned int,cvb::CvBlob *,std::less<unsigned int>,std::allocator<std::pair<unsigned int const ,cvb::CvBlob *> > >() Line 107 C++
nuon.dll!nuon::MarkerDetector::detect(cv::Mat & input, std::vector<nuon::Marker,std::allocator<nuon::Marker> > & detectedMarkers, nuon::CameraParameters camParams, float markerSizeMeters, bool setYPerperdicular) Line 201 C++
この編集が誰かにとってこれを明確にするのに役立つことを願っています