2016-02-08 52 views
0

我下載並編譯了GraphicsMagick,1.3.23,Q16,x64,StaticMT版本。我必須將由GraphicsMagick構建實用程序生成的Visual Studio 7解決方案轉換爲Visual Studio 2015格式。我將我的項目鏈接到CORE_DB_magick_.lib和CORE_DB_Magick ++ _。lib。與GraphicsMagick鏈接錯誤

當鏈接器運行,它連接InitializeMagick()和DestroyMagick(當)產生的未解析的外部符號

 
1>wtd.lib(WebController.obj) : error LNK2019: unresolved external symbol __imp_DestroyMagick referenced in function "public: __cdecl Wt::WebController::~WebController(void)" ([email protected]@@[email protected]) 
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)" ([email protected]@@[email protected]@[email protected][email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) 

我無法理解爲什麼符號不被鏈接。有任何想法嗎?

回答

0

顯然,GraphicsMagick靜態版本不能正確鏈接。

0

您的項目類型是什麼?當試圖將GraphicsMagick庫鏈接到DLL時,我遇到了類似的問題。

這裏的線索是,__imp是DLL導入的函數裝飾,所以你試圖鏈接DLL函數。

問題是,鏈接到DLL項目時,頭文件magick/common.h會讀取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 

由於您的庫靜態鏈接,你可以通過定義註釋掉一切解決這個問題