我非常需要你的帮助。
我正在尝试使用 Visual c++ 2008 编译器在 Windows 上静态编译 poppler 库(特别是 qt4)。为了完成这项任务,我还需要静态编译一堆其他库作为 poppler 的依赖项。当我最终生成 poppler 的静态版本时,在构建我的应用程序时出现链接错误:
error LNK2019: unresolved external symbol "__declspec(dllimport)...
我已经添加了新的包含路径并链接了 poppler-qt4.lib 但我还是得到了错误。寻找解决方案我在stackoverflow中找到了这个讨论
有了这些信息,我查看了库的包含文件(poppler 的依赖项,如 zlib、libpng、cairo ......),我发现在各种情况下,它们没有预处理器指令来指定静态版本库。静态指令示例(openjpeg.h):
#if defined(OPJ_STATIC) || !(defined(_WIN32) || defined(WIN32) || defined(__WIN32__))
# define OPJ_API
# define OPJ_CALLCONV
#else
# define OPJ_CALLCONV __stdcall
# ifdef OPJ_EXPORTS
# define OPJ_API __declspec(dllexport)
# else
# define OPJ_API __declspec(dllimport)
# endif /* OPJ_EXPORTS */
#endif /* !OPJ_STATIC || !WIN32 */
没有静态指令的示例(来自 jpeg lib 的 jconfig.h):
#if defined(_WIN32)
#if defined(libjpeg_EXPORTS)
#define JPEG_EXPORT __declspec(dllexport)
#else
#define JPEG_EXPORT __declspec(dllimport)
#endif
#else
#define JPEG_EXPORT
#endif
我的问题是:将项目的属性从动态更改为静态还不够,所以我还必须更改此标头?如果这是真的,我在哪里可以定义这个新指令以区分静态或动态编译?
提前致谢。