[英]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.