我絕對需要你的幫助。dllimport/dllexport和靜態庫編譯在visual C++
我試圖靜態編譯visual C++ 2008編譯器的窗口上的poppler庫(特別是qt4)。爲了完成這個任務,我需要靜態編譯一些其他庫作爲poppler的依賴項。當我終於產生poppler的靜態版本我建設我的應用程序時,得到了一個鏈接錯誤:
error LNK2019: unresolved external symbol "__declspec(dllimport)...
我已經添加了新的包含路徑和鏈接poppler的-qt4.lib但我得到的錯誤反正。 尋找解決的辦法我在計算器
How to link a static library in Visual C++ 2008?
白衣這個信息,我枕着庫的包含文件發現這裏討論(如zlib的poppler的相關性,的libpng,開羅......)和我在各種情況下發現它們沒有預處理器指令來指定lib的靜態版本。 實例靜態指令(openjpeg.h):
#if defined(OPJ_STATIC) || !(defined(_WIN32) || defined(WIN32) || defined(__WIN32__))
# define OPJ_API
# define OPJ_CALLCONV
#else
# define OPJ_CALLCONV __stdcall
# ifdef OPJ_EXPORTS
# define OPJ_API __declspec(dllexport)
# else
# define OPJ_API __declspec(dllimport)
# endif /* OPJ_EXPORTS */
#endif /* !OPJ_STATIC || !WIN32 */
例無靜態指令(從JPEG LIB jconfig.h):
#if defined(_WIN32)
#if defined(libjpeg_EXPORTS)
#define JPEG_EXPORT __declspec(dllexport)
#else
#define JPEG_EXPORT __declspec(dllimport)
#endif
#else
#define JPEG_EXPORT
#endif
我的問題是:是不足以改變的屬性項目從動態變爲靜態,所以我必須更改這個頭文件嗎?如果這是真的,我可以在哪裏定義這個新的指令來區別靜態或動態編譯?
在此先感謝。
但在這種情況下,我必須定義OPJ_STATIC所以知道如果宏定義? – 2011-01-30 17:06:01