Status: New
Owner: ----
Labels: Type-Defect Priority-Medium
New issue 584 by
a...@amyspark.me: pkg-config modules are broken for MSVC if compiled with -DBUILD_SHARED_LIBS=false
https://bugs.chromium.org/p/webp/issues/detail?id=584What steps will reproduce the problem?
1. Build WebP statically (-DBUILD_SHARED_LIBS=false or unset) with CMake.
2. Use pkg-config to find libwebp. (Do NOT use CMake.)
3. Link your program against libwebp.
What is the expected output? What do you see instead?
I expect a successful linkage. Instead I get, eg. with the Krita WebP impex plugin:
[build] LINK Pass 1: command "C:\PROGRA~1\MIB055~1\2022\Preview\VC\Tools\MSVC\1434~1.318\bin\Hostx64\x64\link.exe /nologo plugins\impex\webp\CMakeFiles\kritawebpimport.dir\kritawebpimport_autogen\mocs_compilation.cpp.obj plugins\impex\webp\CMakeFiles\kritawebpimport.dir\kis_webp_import.cpp.obj /out:bin\kritawebpimport.dll /implib:lib\kritawebpimport.lib /pdb:bin\kritawebpimport.pdb /dll /version:0.0 /machine:x64 /STACK:4194304 /RELEASE /debug /INCREMENTAL /GUARD:CF lib\kritaui.lib E:\krita-win\msvc\i_deps\lib\libwebp.lib E:\krita-win\msvc\i_deps\lib\libwebpdemux.lib lib\kritaimpex.lib lib\kritacolor.lib lib\kritalibbrush.lib lib\kritaimage.lib lib\kritapsdutils.lib lib\kritametadata.lib E:\krita-win\msvc\i_deps\lib\boost_system-vc143-mt-x64-1_80.lib lib\kritawidgets.lib E:\krita-win\msvc\i_deps\lib\KF5Completion.lib lib\kritaflake.lib lib\kritapigment.lib lib\kritamultiarch.lib ws2_32.lib netapi32.lib lib\kritacommand.lib E:\krita-win\msvc\i_deps\lib\Qt5Svg.lib lib\kritaresourcewidgets.lib lib\kritawidgetutils.lib E:\krita-win\msvc\i_deps\lib\KF5ItemViews.lib E:\krita-win\msvc\i_deps\lib\Qt5PrintSupport.lib E:\krita-win\msvc\i_deps\lib\KF5ConfigGui.lib E:\krita-win\msvc\i_deps\lib\KF5GuiAddons.lib E:\krita-win\msvc\i_deps\lib\KF5WidgetsAddons.lib lib\kritaresources.lib E:\krita-win\msvc\i_deps\lib\Qt5Sql.lib lib\kritaplugin.lib E:\krita-win\msvc\i_deps\lib\KF5CoreAddons.lib lib\kritastore.lib lib\kritaglobal.lib E:\krita-win\msvc\i_deps\lib\KF5I18n.lib lib\kritaversion.lib E:\krita-win\msvc\i_deps\lib\Qt5Widgets.lib E:\krita-win\msvc\i_deps\lib\Qt5Concurrent.lib E:\krita-win\msvc\i_deps\lib\gsl.lib E:\krita-win\msvc\i_deps\lib\gslcblas.lib E:\krita-win\msvc\i_deps\lib\KF5ConfigCore.lib E:\krita-win\msvc\i_deps\lib\Qt5Xml.lib E:\krita-win\msvc\i_deps\lib\libpng16.lib E:\krita-win\msvc\i_deps\lib\zlib.lib E:\krita-win\msvc\i_deps\lib\Qt5Multimedia.lib E:\krita-win\msvc\i_deps\lib\Qt5Network.lib E:\krita-win\msvc\i_deps\lib\Qt5Gui.lib E:\krita-win\msvc\i_deps\lib\Qt5Core.lib E:\krita-win\msvc\i_deps\lib\IlmImf-2_5.lib E:\krita-win\msvc\i_deps\lib\Imath-2_5.lib E:\krita-win\msvc\i_deps\lib\Half-2_5.lib E:\krita-win\msvc\i_deps\lib\IexMath-2_5.lib E:\krita-win\msvc\i_deps\lib\IlmThread-2_5.lib E:\krita-win\msvc\i_deps\lib\Iex-2_5.lib E:\krita-win\msvc\i_deps\lib\zlib.lib sharpyuv.lib webpdemux.lib webp.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:plugins\impex\webp\CMakeFiles\kritawebpimport.dir/intermediate.manifest plugins\impex\webp\CMakeFiles\kritawebpimport.dir/manifest.res" failed (exit code 1181) with the following output:
[build] LINK : warning LNK4075: ignoring '/INCREMENTAL' due to '/RELEASE' specification
[build] LINK : fatal error LNK1181: cannot open input file 'sharpyuv.lib'
What version of the product are you using? On what operating system?
libwebp v1.2.4-79-g5b01f321, Windows 10 21H2, MSVC 19.34.31823.3
Please provide any additional information below.
This regression happened in changeset Ib4d5c256b8c90afd54b4d7bcdee8df532095422d. The author is forcing a prefix for static libraries under MSVC, which is not then saved inside the .
pc.in templates.
For instance, pkgconf returns for libwebp:
❯ E:\krita-win\msvc\i_deps\bin\pkgconf.exe --libs libwebp
-LE:/krita-win/msvc/i_deps/bin/../lib -lsharpyuv -lwebp
which is correct according to libwebp.pc, but in fact the library is called:
❯ dir E:\krita-win\msvc\i_deps\lib\lib*.lib
Directory: E:\krita-win\msvc\i_deps\lib
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 02/10/2022 19:53 218833140 libANGLE.lib
-a--- 02/10/2022 19:30 1011470 libcrypto.lib
-a--- 02/10/2022 20:46 35410 libde265.lib
-a--- 02/10/2022 19:53 26406 libEGL.lib
-a--- 02/10/2022 19:36 17934 libexpat.lib
-a--- 02/10/2022 19:53 211484 libGLESv2.lib
-a--- 02/10/2022 19:30 4292 libintl.lib
-a--- 02/10/2022 19:44 1649242 libpng16_static.lib
-a--- 02/10/2022 19:44 55894 libpng16.lib
-a--- 07/10/2022 19:23 88242 libsharpyuv.lib
-a--- 02/10/2022 19:30 121986 libssl.lib
-a--- 07/10/2022 19:23 2587682 libwebp.lib
-a--- 07/10/2022 19:23 1190764 libwebpdecoder.lib
-a--- 07/10/2022 19:23 100718 libwebpdemux.lib
-a--- 07/10/2022 19:23 254072 libwebpmux.lib
-a--- 02/10/2022 20:58 8634 libx265.lib
It can be fixed with the simple expedient of interpolating the correct prefix in the .
pc.in templates. Here I hotpatched by replacing each entry with e.g.:
`-l@CMAKE_STATIC_LIBRARY_PREFIX@sharpyuv`.
A proper fix should make it a common variable, though, since there's no way to know inside configure_file which one is the active prefix.
--
You received this message because:
1. The project was configured to send all issue notifications to this address
You may adjust your notification preferences at:
https://bugs.chromium.org/hosting/settings