在 *.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 中的某些内容。
以下也可以正常工作:
- 编译使用 dllimport/export 的第三方提供的示例(他们提供 *.sln),因此这似乎不是库的错
- 将第三方库编译为生产项目的一部分(因此 dllexport 工作正常)
我已经搜索了两个项目的项目设置页面以尝试发现差异,但出现了空白。当然,我可能会遗漏一些东西,因为这些设置页面不是最容易导航的。我将在一天左右的时间内访问 VS2008,因此可以与之比较。第三方库是 MySql++。