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. 将第三方库编译为生产项目的一部分(因此 dllexport 工作正常)

我已经搜索了两个项目的项目设置页面以尝试发现差异,但出现了空白。当然,我可能会遗漏一些东西,因为这些设置页面不是最容易导航的。我将在一天左右的时间内访问 VS2008,因此可以与之比较。第三方库是 MySql++。

4

2 回答 2

1

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

至于错误

#define DLL_DECL __declspec(dllimport)

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

于 2012-09-13T09:20:30.193 回答
0

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

于 2012-09-13T23:02:48.497 回答