0

*.cpp ファイルで、サード パーティのライブラリを使用しようとしています。

#define DLL_IMPORT 
#include <thirdParty.h>
// Third party header has code like:
// #ifdef DLL_IMPORT
//    #define DLL_DECL __declspec(dllimport)

// fatal error C1001: An internal error has occurred in the compiler.

別:

#define NO_DLL
#include <thirdParty.h>
// Third party header has code like:
// #elif defined(NO_DLL)
//    #define DLL_DECL


// Compiles fine, but linker errors as can't find DLL functions

マクロを削除して #define をすべて一緒に実行し、サードパーティのファイルを手動で編集して __declspec(dllimport) を含めるかどうかを指定することで結果を再現できます。

誰かが似たようなものに出くわしたり、原因を示唆したりできますか? (これは CMake を使用して作成されます)。上記はクラッシュする 2 行の *.cpp の実際の例であり、#include 内の何かに絞り込まれます。

以下も正常に動作します。

  1. ライブラリのせいではないように、dllimport/export を使用するサード パーティ (彼らは *.sln を提供します) によって提供された例をコンパイルします。
  2. 本番プロジェクトの一部としてサードパーティの lib をコンパイルします (したがって、dllexport は正常に動作します)。

2 つのプロジェクトのプロジェクト設定ページを調べて違いを見つけようとしましたが、何も表示されませんでした。もちろん、これらの設定ページはナビゲートするのが最も簡単ではないため、何かが欠けている可能性があります. 1日かそこらでVS2008にアクセスできるようになるので、それと比較できます。サードパーティ ライブラリは MySql++ です。

4

2 に答える 2

1

コンパイラのクラッシュは間違いなくコンパイラのバグであるため、Microsoft Visual C++ チームにエラー レポートを送信することをお勧めします。

エラーに関しては

#define DLL_DECL __declspec(dllimport)

物事の進め方が間違っています。設定する必要があるプロジェクト設定、代わりに定義できる前処理ディレクティブDLL_DECL、または単に別のファイルを含める必要があります。

于 2012-09-13T09:20:30.193 に答える
0

DLL を使用しようとしているプロジェクトで、プリコンパイル済みヘッダーがオンになっていることが原因であることが判明しました。

于 2012-09-13T23:02:48.497 に答える