2009-04-07 184 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 ...