我正在尝试将.dll链接到QuaZip库的静态构建中,以消除运行时的quazip.dll依赖。因为我在生产中遇到了依赖冲突,因为一个客户正在使用其他第三方应用程序,在这个过程中,我的.dll被排除在外,这些应用程序也在使用quazip.dll,但使用的是遗留版本。我的步骤首先是按照其他带有ZLIB_WINAPI标志的帖子中的指示静态编译zlib依赖项。然后,我还使用适当的QuaZip标志和QUAZIP_STATIC编译了QUAZIP_STATIC。与zlib.h一样,我使用了QtZlib/zlib.h标头,就像这个post推荐的那样。在我的.dll项目中,我还尝试设置所有提到的标志(QUAZIP_STATIC似乎是必要的)。现在,当我试图编译我的.dll时,我会得到以下错误
1>quazip.lib(zip.obj):error LNK2019: Verweis stes在函数"_zipCloseFileInZipRaw64@16“中外化符号"__imp__z_deflate@8”。
1>quazip.lib(zip.obj):error LNK2019: Verweis stes在函数"_zipCloseFileInZipRaw64@16“中外化符号"__imp__z_deflateEnd@4”。
1>quazip.lib(zip.obj):error LNK2019: Verweis stes在函数"_zipWriteInFileInZip@12“中外化符号"__imp__z_crc32@12”。
1>quazip.lib(unzip.obj):error LNK2001: Nicht aufgel stes外部符号"__imp__z_crc32@12“。
1>quazip.lib(zip.obj):error LNK2019: Verweis stes在函数"_zipOpenNewFileInZip4_64@76“中外化符号"_imp__z_deflateInit2@32”。
1>quazip.lib(zip.obj):error LNK2019: Verweis stes在函数"_zipOpenNewFileInZip4_64@76“中外化符号"__imp__z_get_crc_table@0”。
1>quazip.lib(unzip.obj):error LNK2001: Nicht aufgel stes外部符号"__imp__z_get_crc_table@0“。
1>quazip.lib(unzip.obj):error LNK2019: Verweis stes在函数"_unzReadCurrentFile@12“中外化符号"__imp__z_inflate@8”。
1>quazip.lib(unzip.obj):error LNK2019: Verweis stes在函数"_unzCloseCurrentFile@4“中外化符号"__imp__z_inflateEnd@4”。
1>quazip.lib(unzip.obj):error LNK2019: Verweis stes在函数"_unzOpenCurrentFile3@20“中外化符号"_imp__z_inflateInit2@16”。
所有项目都是使用/MT标志构建的。
这是我的链接器命令行
/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”“slgfw.lib”"slgfwwidget.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“先进32.lib”、“level 32.lib”、"ole32.lib“、"uuid.lib”、"odbc32.lib“、"odbccp32.lib”、/DLL /MACHINE:X86 /SAFESEH /INCREMENTAL:NO /PGD:"builds\qt5\dll\release.pgd“/SUBSYSTEM:WINDOWS /MANIFESTUAC:"level='asInvoker‘uiAccess='false'”、“/DLL /ERRORREPORT:PROMPT /NOLOGO /LIBPATH:"S:/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“
如果有任何新的建议,我会很感激的,因为我已经尝试了将近一个星期了,而且我的想法已经没有了。
发布于 2022-03-14 14:34:53
好吧,三天的痛苦和我有解决办法。我重新编译了zlib,这次没有使用\cont肋骨\vstudio\ my 14中提供的项目文件,而是用CMake生成自己的项目文件。然后,QuaZip用标志QUAZIP_STATIC链接到它。然后,我在我的项目中设置了这个标志,它使用QuaZip并将其链接到构建的quazip.lib及其依赖项zlibstatic.lib。现在,库是静态地内置到我的.dll中的,我不再需要提供导致冲突的quazip.dll。
https://stackoverflow.com/questions/71467429
复制相似问题