2009-04-07 144 views
0

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

我无法从创作者的主页获取MagickNet源文件的副本,因为它目前处于关闭状态,所以我不得不从here获取文件和C++项目文件,由Google搜索提供。

按照herehere的说明,我创建了一个项目,使用“静态多线程DLL”选项并对其进行编译,然后再转到MagickNet项目文件并进行编译,确保所有路径指向到正确的文件夹。

即使如此,我一直在编译时收到此错误:

CORE_RL_magick_.lib(nt-base.obj) : error LNK2005: [email protected] already defined in MSVCRT.lib(dllmain.obj) 

我也收到其他的371个错误,它们都涉及到一个“解析外部符号XXXXXXXX”,并描述了我最后的372错误有“195个未解决的外部人员”。

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

我已经为有类似问题的人执行了一次(Google)搜索,并且some曾经说过,作者提供了一个预编译的MagickNet DLL的下载,该DLL可以100%工作,但是(正如我之前提到的)他的主页似乎现在无法访问。

我目前正在寻找这些解决方案之一:

  1. 解决我的编译问题,因为我可以在我的部分犯了一个错误,因为我不熟悉C++可言,
  2. 指向另一个MagickNet源文件/项目zip的链接,该链接经过100%确认可以用最新版本的ImageMagick正确编译,
  3. 指向MagickNet DLL 100%工作预编译副本的链接,如果任何人保留了来自作者的主页。它应该大约3MB,因为它也包含ImageMagick库。

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

此外,我正在使用Visual Studio 2008编译源文件,并提供的项目完全没有问题转换。

回答

2

我只是能够通过这个,并成功地能够对最新版本的ImageMagick编译MagickNET。我不得不做几件事。

  1. 配置ImageMagick使用StaticMTDll。
  2. 编辑magick-config.h以取消定义X11支持。
  3. 从ImageMagick解决方案中删除了CORE_xlib项目。
  4. 清洁/重建的ImageMagick
  5. 加入
  6. 下的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

  7. 内置MagickNet

我必须对MagickNet进行更新,因为方法从源版本o开始已被弃用在MagickNet网站上。我会尝试联机存储库以共享整个解决方案。

0

由于(我猜测,它似乎是基于谷歌搜索是真的)msvcrt和MFC库的链接顺序,你看到一个链接器问题。在MSDN上的This article似乎有一个解决方法 - 日期,但基本问题是相同的,所以选项应该类似。

+0

我试过那篇文章,但它似乎没有任何效果。事实上,它将错误数量增加到了4000+。 – TheFuzzy 2009-04-08 03:43:06

1

我有完全相同的问题,Bromanko的答案解决它......一个不起眼的新增:

在ImageMagick的magick-的config.h

,除了commmenting出列:

define MAGICKCORE_X11_DELEGATE 

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

define ProvideDllMain 

然后你会用气做饭。

谢谢bromanko ...