2011-04-19 57 views
0

儘管執行與所有其他庫相同的例程,但我仍然有嚴重的問題鏈接庫。該庫是libmupdf.lib(pdf查看庫)。儘管在dumpbin.exe中報告了鏈接函數的問題

無論如何,我編譯了.lib,並在鏈接器中將其添加爲「其他依賴項」,添加了頭文件作爲附加內容,並指定了VSC++應該在哪裏查找庫。它不會抱怨在鏈接開始時找不到libmupdf.lib。

然後我得到的標準尋找鏈接錯誤:

error LNK2019: unresolved external symbol "int __cdecl fz_strlcat(char *,char const *,int)" ([email protected]@[email protected]) referenced in function "void __cdecl winerror(struct pdfapp_s *,int)" ([email protected]@[email protected]@[email protected]) 

但是,如果我做了以下我看到fz_strlcat的確是libmupdf.lib但有_ ......這是正常的前綴?

C:\Program Files\Microsoft Visual Studio 10.0\VC>dumpbin /SYMBOLS "libmupdf.lib" | "grep.exe" fz_strlcat 
033 00000000 SECTC notype() External  | _fz_strlcat 
060 00000000 UNDEF notype() External  | _fz_strlcat 
381 00000000 UNDEF notype() External  | _fz_strlcat 

注:我試圖改變呼叫fz_strlcat到_fz_strlcat並提出在頭的變化,但仍然沒有聯繫。

在這一點上,任何線索或幫助表示讚賞。謝謝!

回答

8

你似乎錯過了菲茨庫。這是MuPDF項目的一部分,但它作爲一個單獨的LIB文件構建。

編輯
我站在糾正:在看關於MuPDF的Git倉庫的vcproj文件,看來libmupdf.lib建立作爲一個大的圖書館,所有的菲茨東西,以及甚至第三方庫per- SE。

現在...在錯誤消息中查看更詳細的信息,這看起來像是C vs C++鏈接問題。我錯在看到fz_strlcat函數是從C++調用的,fitz.h可能沒有包含在extern "C" {}鏈接中?
在這種情況下會發生什麼情況是,C++會產生一個連接錯誤的名稱([email protected]@[email protected]),其中包含函數完整簽名代碼(參數類型等)。
通過添加

extern "C" { 
    #include "fitz.h" // or whatever other include file which in turn includes fitz.h 
} 

各地包括涉及到的libmupdf庫函數和變量,該LNK錯誤應該消失。

+0

我似乎能夠從源代碼構建的唯一庫是libmupdf.lib和libthirdparty.lib。我看不到任何圖書館fitz。我也可以用libmupdf和librthirdparty構建mupdf.exe(包含在源代碼中) - 據我所知。 – jparanich 2011-04-19 18:36:52

+0

你的權利,它是從C++調用,所以我包裝的包括。爲extern 「C」{ 的#include 的#include 的#include 「pdfapp.h」 }但錯誤更改 - >錯誤LNK2019:解析外部符號_fz_strlcat在功能_winerror引用 – jparanich 2011-04-19 18:56:29

+0

對不起我的額外的編輯和您的評論得到了越過....讓我想... – mjv 2011-04-19 19:01:04