簡體   English   中英

VS2010 中的 Magick++ - 未解析的外部符號

[英]Magick++ in VS2010 - unresolved external symbol

我正在嘗試將 ImageMagick Magick++ 用於 VS2010 中的 C++ 項目。 我從這里安裝了庫: klick

然后在我的項目中,我將 c:/program files/ImageMagick-6.6.6-Q16/include 添加到包含文件夾中。 然后我嘗試在這段代碼中使用 Magick++:

#include <Magick++.h>
void main(int argc, char ** argv){
    InitializeMagick(*argv);
}

但這不起作用:VS2010 返回以下錯誤:

error LNK2001: unresolved external symbol "__declspec(dllimport) void __cdecl    Magick::InitializeMagick(char const *)" (__imp_?InitializeMagick@Magick@@YAXPBD@Z)
error LNK1120: 1 unresolved externals

我究竟做錯了什么?

非常感謝您的幫助!

更新:

將鏈接器 -> 輸入 -> 附加依賴項設置為:

kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;CORE_RL_Magick++_.lib

和鏈接器 -> 常規 -> 附加庫目錄:

C:\Program Files\ImageMagick-6.6.6-Q16\lib

它仍然導致相同的錯誤......

更新 2

打開 C:\Program Files\ImageMagick-6.6.6-Q16\lib 中的 .lib 文件會導致此錯誤:替代文字

更新 3

CORE_RL_Magick++_.lib 確實包含?InitializeMagick@Magick@@YAXPEBD@Z,但不包含?InitializeMagick@Magick@@YAXPBD@Z。 這是否意味着 .lib 文件已損壞?

更新 4

我通過手動編譯 the.lib 文件解決了我的問題。 謝謝大家!

CORE_RL_Magick++_.lib 確實包含?InitializeMagick@Magick@@YAXPEBD@Z,但不包含?InitializeMagick@Magick@@YAXPBD@Z

使用 undname.exe 實用程序,這些名稱取消修飾為:

void __cdecl Magick::InitializeMagick(char const *)
void __cdecl Magick::InitializeMagick(char const * __ptr64)

請注意您在參數中獲得的 __ptr64 聲明符。 您有某種編譯設置可以將 char* 轉換為 64 位指針。 就像針對 64 位操作系統編譯此代碼一樣。 但是鏈接了32-bit.lib。 這通常會生成有關 the.lib 的位錯誤的鏈接器錯誤,不太確定為什么您看不到它。 也許是 mingw 神器,不確定它是如何工作的。

您還應該向 Visual Studio 指示要用於鏈接的.lib

在鏈接器 -> 輸入 -> 附加依賴項

編輯:並放置魔法庫的路徑

在 Linker -> General -> Additional Library Directories

EDIT2:如果它仍然不起作用,那么你正在調用一個帶有錯誤導出簽名的函數。 啟動 msdev 工具 Dependency Walker。 並檢查 magick.lib 是否真的導出了名稱為?InitializeMagick@Magick@@YAXPBD@Z的函數

我錯了,它不是微軟的工具: Dependency Walker

我錯了 Dependency Walker 沒有 open.lib,只有 Dll 和 Exes。 但是既然你在.lib文件的內容中找到了?InitializeMagick@Magick@@YAXPBD@Z ,那就意味着它是真正以這種方式導出的。

EDIT3:你確定附加庫的名稱和文件夾是正確的嗎? 我真的想不出 Visual C++ 無法與您的庫鏈接的另一個原因。 如果 your.lib DO 包含字符串?InitializeMagick@Magick@@YAXPBD@Z我真的認為它應該鏈接。

EDIT4:你能從文件<Magick++.h>中粘貼 InitializeMagick 的原型定義嗎? Visual C++ 和您的庫供應商之間的編譯方式有所不同。 ?InitializeMagick@Magick@@YAXPEBD@Z?InitializeMagick@Magick@@YAXPEBD@Z是兩個不同的簽名。 當包含<Magick++.h> Visual C++ 對其有不同的理解。 (這就是為什么我需要查看函數的原型)

您還應該向 Visual Studio 指示 .lib 用於在 Linker -> Input -> Additionnal Dependencies 中進行鏈接

謝謝:附加依賴行現在包含以下文本(查看末尾)。 kernel32;lib.user32;lib.gdi32;lib.winspool;lib.comdlg32;lib.advapi32;lib.shell32;lib.ole32;lib.oleaut32;lib.uuid;lib.odbc32;lib.odbccp32;lib:C。 \Program Files\ImageMagick-6.6.6-Q16\lib\CORE_RL_Magick++_.lib

它仍然不起作用。 是不是錯了.lib文件?

this.lib 文件是做什么用的? 源代碼不應該只是工作嗎? 沒有任何DLL...

文檔說:“Windows 用戶可以通過手動編輯其中一個 Magick++ 演示程序的項目文件來開始。” 你試過了嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM