使用GraphicsMagick

时间:2016-02-08 21:46:07

标签: c++ visual-c++ graphicsmagick

我下载并编译了GraphicsMagick,1.3.23,Q16,x64,StaticMT版本。我不得不将GraphicsMagick构建实用程序生成的Visual Studio 7解决方案转换为Visual Studio 2015格式。我将我的项目链接到CORE_DB_magick_.lib和CORE_DB_Magick ++ _。lib。

当链接器运行时,它在链接InitializeMagick()和DestroyMagick()时生成了未解析的外部符号

1>wtd.lib(WebController.obj) : error LNK2019: unresolved external symbol __imp_DestroyMagick referenced in function "public: __cdecl Wt::WebController::~WebController(void)" (??1WebController@Wt@@QEAA@XZ)
1>wtd.lib(WebController.obj) : error LNK2019: unresolved external symbol __imp_InitializeMagick referenced in function "public: __cdecl Wt::WebController::WebController(class Wt::WServer &,class std::basic_string,class std::allocator > const &,bool)" (??0WebController@Wt@@QEAA@AEAVWServer@1@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@_N@Z)

我无法理解为什么这些符号没有被链接。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

显然,GraphicsMagick Static版本没有正确链接。

答案 1 :(得分:0)

您的项目类型是什么?尝试将GraphicsMagick库链接到DLL时,我遇到了类似的问题。

这里的线索是__imp是DLL导入的函数修饰,所以你试图链接DLL函数。

问题是标头magick / common.h在链接到DLL项目时会读取Visual Studio预处理器环境的当前配置,以确定该库所处的模式,如果你这样做,这显然是错误的。例如,尝试将静态库链接到DLL中。在这种情况下,它将MagickExport定义为__declspec(dllimport)。

AFAIK这是库中的一个错误。为了获得正确的静态构建支持,magick / common.h需要执行类似于magick / magick_config.h中读取信息的操作,以确定实际构建库的模式并适当地定义MagickExport。

由于您的库是静态链接的,您可以通过注释define中的所有内容来解决此问题:

#if defined(MSWINDOWS) && !defined(__CYGWIN__)

并将其替换为:

#define MagickExport
#define ModuleExport
#define MagickGlobal