【发布时间】:2012-09-06 08:22:03
【问题描述】:
在 *.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++。
【问题讨论】:
-
您的意思是链接器崩溃,或者链接器报告错误 LNKxxxx ?
标签: c++ visual-c++ declspec