簡體   English   中英

在 VS2017 中使用 Qt5.12 將 dll 鏈接到 static 構建的 QuaZip

[英]Link dll against static build of QuaZip using Qt5.12 in VS2017

我正在嘗試將 a.dll 鏈接到 static 構建的 QuaZip 庫,以擺脫運行時的 quazip.dll 依賴。 因為我在生產中遇到了依賴沖突,因為客戶在同一進程中使用其他第三方應用程序,其中 my.dll 未被排除,它們也使用 quazip.dll 但遺留版本。 我的步驟是首先按照其他帖子中的說明使用 ZLIB_WINAPI 標志靜態編譯 zlib 依賴項。 然后我還使用適當的 ZLIB_WINAPI 標志和 QUAZIP_STATIC 編譯了 QuaZip。 作為 zlib.h,我使用了 QtZlib/zlib.h header,就像這篇文章中推薦的那樣。 在我的 .dll 項目中,我還嘗試設置所有提到的標志(QUAZIP_STATIC 似乎是必要的)。 現在,當我嘗試編譯 my.dll 時,出現以下錯誤

1>quazip.lib(zip.obj): error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__z_deflate@8" in Funktion "_zipCloseFileInZipRaw64@16".
1>quazip.lib(zip.obj): error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__z_deflateEnd@4" in Funktion "_zipCloseFileInZipRaw64@16".
1>quazip.lib(zip.obj): error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__z_crc32@12" in Funktion "_zipWriteInFileInZip@12".
1>quazip.lib(unzip.obj): error LNK2001: Nicht aufgelöstes externes Symbol "__imp__z_crc32@12".
1>quazip.lib(zip.obj): error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_ imp__z_deflateInit2 @32" in Funktion "_zipOpenNewFileInZip4_64@76".
1>quazip.lib(zip.obj): error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__z_get_crc_table@0" in Funktion "_zipOpenNewFileInZip4_64@76".
1>quazip.lib(unzip.obj): error LNK2001: Nicht aufgelöstes externes Symbol "__imp__z_get_crc_table@0".
1>quazip.lib(unzip.obj): error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__z_inflate@8" in Funktion "_unzReadCurrentFile@12".
1>quazip.lib(unzip.obj): error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__z_inflateEnd@4" in Funktion "_unzCloseCurrentFile@4".
1>quazip.lib(unzip.obj): error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_ imp__z_inflateInit2 @16" in Funktion "_unzOpenCurrentFile3@20".

所有項目都是使用 /MT 標志構建的。

這是我的 linker 命令行

/OUT:"builds\qt5\dll\release\.dll" /MANIFEST /NXCOMPAT /PDB:"builds\qt5\dll\release\.pdb" /DYNAMICBASE "qtmain.lib" "Qt5Core.lib" "Qt5Gui.lib " "Qt5Widgets.lib" "Qt5Sql.lib" "Qt5Network.lib" "Qt5PrintSupport.lib" "qwt.lib" "sloperatecppapi.lib" "slgfw.lib" "slgfwwidget.lib" "slcap.lib" "sltrc.lib " "sltrp.lib" "slhmiutilitieslib.lib" "slaesvcadapter.lib" "slfsfilesvcadapter.lib" "sltraceadapter.lib" "slarchiveadapter.lib" "slmd.lib" "slgfwmanager.lib" "slcncversioninfo.lib" "quazip.lib " "setupapi.lib" "wsock32.lib" "ws2_32.lib" "ucrt.lib" "vcruntime.lib" "msvcrt.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib " "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /DLL /MACHINE:X86 /SAFESEH /增量:否 /PGD:"builds\qt5\dll\release<myapplication>.pgd" /SUBSYSTEM:WINDOWS /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"builds\qt5\dll\release <我的應用程序>.dll.intermediate.man ifest" /ERRORREPORT:PROMPT /NOLOGO /LIBPATH:"S:\hmisl\lib" /LIBPATH:"S:\hmisl\siemens\sinumerik\hmi\osal\ace\lib" /LIBPATH:"S:\hmisl\siemens \sinumerik\hmi\osal\qt\lib" /LIBPATH:".\include\qt5\qwt\lib" /LIBPATH:".\include\qt5\quazip\lib" /LIBPATH:".\include\qt5\modbus \lib" /LIBPATH:".\include\qt5\qtsingleapplication\lib\release" /TLBID:1

如果有任何新提示,我將不勝感激,因為我已經嘗試了將近一個星期,但我的想法已經用完了。

好的,三天的痛苦,我找到了解決方案。 我重新編譯了 zlib,這次沒有使用 \contrib\vstudio\vc14 中提供的項目文件,而是使用 CMake 生成我自己的項目文件。然后 QuaZip 使用標志 QUAZIP_STATIC 鏈接到它。 然后我在我的項目中設置這個標志,它使用 QuaZip 並將它鏈接到構建的 quazip.lib 及其依賴項 zlibstatic.lib。 現在庫靜態內置到 my.dll 中,我不再需要提供導致沖突的 quazip.dll。

暫無
暫無

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

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