0

我正在尝试使用 ImageMagick 和 MagickNet 库中的源代码编译MagickNet类库 (DLL) 的工作副本。

我无法从创建者的主页获取 MagickNet 源文件的副本,因为它目前已关闭,因此我被迫从此处获取文件和 C++ 项目文件,这是通过 Google 搜索提供的。

按照此处此处所述的说明,我使用“静态多线程 DLL”选项创建了一个项目并对其进行了编译,然后在确保所有路径都指向正确的文件夹之后,移至 MagickNet 项目文件并对其进行编译.

即便如此,我在编译时仍然收到此错误:

CORE_RL_magick_.lib(nt-base.obj) : error LNK2005: _DllMain@12 already defined in MSVCRT.lib(dllmain.obj)

我还收到 371 个其他错误,所有这些都与“未解决的外部符号 xxxxxxxx”有关,最后一个错误描述了我有“195 个未解决的外部”。

我通过在 ImageMagick 解决方案中的 CORE_magick 项目中注释掉 nt-base.c 源文件中的 DllMain 声明,设法解决了上面的 DllMain 错误,但是仍然存在 372 个其他“未解决的外部”错误。

我对有类似问题的人进行了(谷歌)搜索,有人说作者提供了一个预编译的 MagickNet DLL 下载,它可以 100% 工作,但是(正如我之前提到的)他的主页似乎无法访问现在。

我目前正在寻找以下解决方案之一:

  1. 我的编译问题的解决方案,因为我根本不熟悉 C++,所以我可能会犯错误,
  2. 另一个 MagickNet 源文件/项目 zip 的链接 100% 确认可以使用最新版本的 ImageMagick 正确编译,
  3. 如果有人保留作者主页上的副本,则指向 MagickNet DLL 的 100% 工作预编译副本的链接。它应该是大约 3MB,因为它还包含 ImageMagick 库。

我真的很感激这些解决方案中的任何一种,因为我迫切需要 ImageMagick 操作和转换图像的能力,以及 MagickNet 的易用性。如果您需要更多信息,我可以提供更多详细信息。

此外,我正在使用 Visual Studio 2008 编译源文件,并且提供的项目可以毫无问题地进行转换。

4

3 回答 3

2

我刚刚克服了这个问题,并成功地针对最新版本的 ImageMagick 编译了 MagickNET。我不得不做几件事。

  1. 将 ImageMagick 配置为使用 StaticMTDll。
  2. 编辑了 magick-config.h 以取消定义 X11 支持。
  3. 从 ImageMagick 解决方案中删除了 CORE_xlib 项目。
  4. ImageMagick 的清理/重建
  5. 将以下 lib 文件添加到 MagickNet 的链接器设置中

    CORE_DB_bzlib_.lib
    CORE_DB_coders_.lib
    CORE_DB_jbig_.lib
    CORE_DB_jpeg_.lib
    CORE_DB_magick_.lib
    CORE_DB_png_.lib
    CORE_DB_tiff_.lib
    CORE_DB_ttf_.lib
    CORE_DB_wand_.lib
    CORE_DB_wmf_.lib
    CORE_DB_zlib_.lib
    CORE_DB_libxml_.lib
    CORE_DB_jp2_.lib
    CORE_DB_lcms_.lib
    WS2_32.LIB

  6. 建立MagickNet

我确实必须对 MagickNet 进行更新,因为自 MagickNet 网站上的源代码发布以来,方法已被弃用。我将尝试将存储库放在网上以共享整个解决方案。

于 2009-12-04T23:40:57.677 回答
1

我遇到了完全相同的问题,Bromanko 的回答解决了它……加上一个小补充:

在 imagemagick 的 magick-config.h 中,除了注释掉这一行:

define MAGICKCORE_X11_DELEGATE

...还需要注释掉该行:

define ProvideDllMain

然后你会用煤气做饭。

谢谢布罗曼科...

于 2010-09-06T04:54:21.480 回答
0

您看到链接器问题是由于(我猜,根据谷歌搜索似乎是真的)msvcrt 和 MFC 库的链接顺序。MSDN上的这篇文章似乎有一个解决方案 - 过时了,但基本问题是相同的,因此选项应该相似。

于 2009-04-07T19:07:21.080 回答