質問

また、C++のプロジェクトを使用するQt(gui lib VTK(グラフィックlib)は、他の図書館では曖昧にないものもと、これまでどおりではなく電話でLIB_X.のプロジェクトを使Qtのためのgui部品VTK(より正確には、QVTKWidget拡張によるVTKを支えるQt)描画のための幾何..して使用しLIB_X集操作することを予想しました。

問題はここで示されているデータLIB_X実際に使VTK(かわかんないで、閉じた。最初に問題のないコンパイルの両方libリンクしたものであっという一定の高い要)LIB_X機能をコンパイルledスタッフのblah blahもVTK lib/objで既に定義されていLIB_X dll'ます。

例えば(注する多くの警告ここで、知りたい場合は、エラーにな力:複数のそもそもの私の回答の郵送ください):

1>LIB_X.lib(LIB_X.dll) : warning LNK4006: "public: __thiscall std::vector<double,class std::allocator<double> >::~vector<double,class std::allocator<double> >(void)" (??1?$vector@NV?$allocator@N@std@@@std@@QAE@XZ) already defined in vtkCommon.lib(vtkInformationDoubleVectorKey.obj);

を使ってみました/力:複数でも奇跡的にもどんどんランダム誤差にコードが多いヒープます。私は全て取り除くを参照LIB_Xからメインプロジェクトを作成静的libを務を取り扱うすべてのLIB_X。したらいいと思います。C++の専門家だけではないがどを取り扱うlibぶつかり合いを使用したライブラリがまだまだ受libにぶつ誤差をリンクする場合には、当該マ静libに私の主なプロジェクトですが、利用力がある。

また、静libされるようになったとのランダムな誤差がなくなり、たくさんLIB_X方法本プロジェクトの静的ライブラリが突如しているものであり、発表という新しいデータを会員の自主プロジェクトのクラス(std::vectorのdouble)がってきましたね、ヒープのエラーの静的ライブラリの方法。また、新しいデータの委員は、静的ライブラリの方法で行う。ているのは嫌だ、現在のエラーが正しくなった場合の検証で価値のあるものの、ここでのゴミ箱でかくれんぼの場合です:

注意:でクラッシュをxutility約線151,出張"ファイル:dbgheap.cライン:1279表現_CrtIsValidHeapPointer(pUserData)"

エラーがを加えたものをベクトルのベクトルのダブルベクトルのベクトルベクターダブル、波のpush_back線

std::vector<std::vector<double>> tmpVec;
for(srvl_iter = srvl.begin(); srvl_iter != srvl.end(); ++srvl_iter)
{
 tmpVec.push_back((*srvl_iter).getControlPoints());
}
this->_splines.push_back(tmpVec); //CRASH

で開始チ時になっていたため、新しいデータを会員の自主プロジェクトの静的lib!) コメントにより、新しいデータメンバはエラーです。

std::vector<std::vector<std::vector<double>>> _geometry; 

なので、/力:複数のう悪かランダムな誤差となるのは意味のあることでしょう。ある他のソリューション?私螺?ものがあるのか、それは何なのか私はできないLIB_XのリンクのVTK?

役に立ちましたか?

解決

建築物で、国宝-重要文集 LNK4006 誤差本サイトにリンクされる場合私のアプリのライブラリー(ここでは図書館LIB_Y)として重用 std::vector<std::string>, 私も私のアプリです。後の実験から解決法の一つは勤務している--ラップLIB_Y別DLLるLIB_Y(LIB_Y_WRAPPERとします)、そしてリンクのメインアプリに対しLIB_Y_WRAPPER.

試用には、私の提案が必要となります:

  1. の変更"静libを取り扱うすべてのLIB_Xもの"から静LIBプロジェクトへのDLLプロジェクト(私はLIB_X_WRAPPER).
  2. のヘッダファイルのLIB_X_WRAPPER含まれていませんのLIB_Xヘッダファイルです。この 本当に重要な ためのラッパーのニーズを完全に分離をアプリからのデータ型を宣言されたのLIB_Xヘッダファイルなど std::vector<double>).のみを参照してLIB_Xのヘッダファイル内のソースファイルのLIB_X_WRAPPER.
  3. 変更の宣言のすべてのクラスと関数を静的libたしたものであることを確認してから輸出されたDLLを参照 この答え が必要な場合は詳細からの輸出は、DLL)のようにします。

このソリューションで働くためではないかと考えられているインスタンス生成(コンパイラ生成機能)の std::vector<std::string> クラスの使用によるLIBY完全分離からのインスタンス生成 std::vector<std::string> 私のアプリです。

ちなみに、疑いの原因にクラッシュで見る(コメントでは、デストラクタの std::vector<double> がでのインスタンス生成 std::vector<double> アが異なることLIB_X.

他のヒント

あなたはいつもそれをすぐに表示されていないあなたは、ヒープが破損している場合は、STLベクトルが割り当てられますし、それがエラーを見つけることだ不思議ではありませんので、DEALLOCATE物事が左と右のコメントアウトすることはおそらくちょうどランダム運です。 P>

いくつかのLIBSには、あなたが特定の順序で物事を含める必要があります。私はわからない、なぜ私にそれはあきらめて、あなたが適切にライブラリーを設計することができないと言ってように思えるが、それは悲しい事実ですまさにので。長いので、それはしかし、問題ないはずVTKあなたが含まどこでもというこのlib_xを含まないようます。

しかし、彼らはいくつかのリソース上で戦うか、それは不可能それらが一緒に作業できるようになり、不適切なものを使用している場合があります。あなたは、コンパイルがそれらを分離することにより、正常に動作するために取得することができ、それはまだ失敗した場合、それはこのlib_xが設計された方法でちょうど失敗だと、それはとてもあいまいなので、それがされている可能性はありませんので、[はい、あなただけの運の外にあります徹底的にすべての使用に対してデバッグ。何かが広く使用されていないときには、通常、開発者のマシンとのプロジェクトに取り組んでいますが、必ずしも他人の何かされて終わる。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top