__declspec(dllimport)导致MSVC 2010上的编译器崩溃

时间:2012-09-13 09:12:33

标签: c++ visual-c++ declspec

在* .cpp文件中,尝试使用第三方lib:

#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正常工作)
  3. 我已经搜索了两个项目的项目设置页面,试图找出差异,但是空白了。当然,我可能会遗漏一些东西,因为那些设置页面不是最容易导航的。我将在一天左右的时间内访问VS2008,因此可以与之进行比较。第三方库是MySql ++。

2 个答案:

答案 0 :(得分:1)

编译器崩溃绝对是编译器中的一个错误,因此您最好向Microsoft Visual C ++团队提交错误报告。

至于错误

#define DLL_DECL __declspec(dllimport)

是错误的做事方式。应该设置一些项目设置,如果DLL_DECL可以定义预处理指令,或者只是包含不同的文件。

答案 1 :(得分:0)

原来这是因为试图使用DLL的项目打开了预编译头文件。