将错误与图形魔术链接

Link errors with GraphicsMagick

本文关键字:魔术 链接 图形 错误      更新时间:2023-10-16

我下载并编译了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(:错误LNK2019:__imp_DestroyMagick函数"public: __cdecl Wt::WebController::~WebController(void("(??1WebController@Wt@@QEAA@XZ(1>wtd.lib(WebController.obj( : 错误 LNK2019: __imp_InitializeMagick函数"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(

我不明白为什么符号没有链接。有什么想法吗?

显然,GraphicsMagick Static 版本无法正确链接。

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

这里的线索是,__imp是 DLL 导入的函数修饰,因此您正在尝试与 DLL 函数链接。

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

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

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

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

并将其替换为:

#define MagickExport
#define ModuleExport
#define MagickGlobal