Skip to content

Build errors LNK2001 on Windows [bug] #8

@AndreyMZ

Description

@AndreyMZ

Steps to reproduce

  1. Build and install the C library libversion on Windows:

    set LIBVERSION_REF=3.0.1
    choco install -y git cmake visualstudio2017buildtools pkgconfiglite
    git clone https://github.com/repology/libversion.git --branch="%LIBVERSION_REF%"
    cd libversion
    cmake . -G "Visual Studio 15 2017 Win64"
    cmake --build . --config Release
    cmake --install .
    setx PKG_CONFIG_PATH "C:/Program Files/libversion/lib/pkgconfig"
    
  2. Check that it is discoverable by pkg-config:

    pkg-config --libs --cflags libversion
    
  3. Try to build the Python module libversion:

    git clone https://github.com/repology/py-libversion.git
    cd py-libversion
    python setup.py build
    

Actual result

(venv) C:\py-libversion>pkg-config --libs --cflags libversion
-IC:/Program\ Files/libversion/include -LC:/Program\ Files/libversion/lib -lversion

(venv) C:\py-libversion>python setup.py build
running build
running build_py
running build_ext
building 'libversion._libversion' extension
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD "-IC:/Program Files/libversion/include" -ID:\GIT\thirdparty-tr
acking\py-libversion\venv\include -IC:\Python38\include -IC:\Python38\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\ATLMFC\include" "-IC:\
Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um" "-IC:\Program Files (x86)\Windows Kits\10\include
\10.0.17763.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\1
0.0.17763.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt" /Tcsrc/_libversion.c /Fobuild\temp.win-amd64-3.8\Release\src/_libversion.obj
_libversion.c
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x64\link.exe /nologo /INCREMENTAL:NO /LTCG /DLL /MANIFEST:EMBED,ID=2 /MANIFESTUAC:NO "/LIBPATH:C:/Program Fil
es/libversion/lib" /LIBPATH:C:\py-libversion\venv\libs /LIBPATH:C:\Python38\libs /LIBPATH:C:\Python38 /LIBPATH:C:\py-libversion\venv\PCbuild\am
d64 "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\ATLMFC\lib\x64" "/LIBPATH:C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16
.27023\lib\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kits\10\lib\10.0.17763.0\ucrt\x64" "/LIBPATH:C:\Program Files (x86)\Windows Kit
s\10\lib\10.0.17763.0\um\x64" version.lib /EXPORT:PyInit__libversion build\temp.win-amd64-3.8\Release\src/_libversion.obj /OUT:build\lib.win-amd64-3.8\libversion\_libversion.cp38-win_amd64.pyd /IMPLIB:build\te
mp.win-amd64-3.8\Release\src\_libversion.cp38-win_amd64.lib
   Создается библиотека build\temp.win-amd64-3.8\Release\src\_libversion.cp38-win_amd64.lib и объект build\temp.win-amd64-3.8\Release\src\_libversion.cp38-win_amd64.exp
_libversion.obj : error LNK2001: unresolved external symbol "__imp_version_compare4"
_libversion.obj : error LNK2001: unresolved external symbol "__imp_version_compare2"
build\lib.win-amd64-3.8\libversion\_libversion.cp38-win_amd64.pyd : fatal error LNK1120: 2 unresolved externals
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x64\\link.exe' failed with exit status 1120

Expected result

No errors LNK2001:

_libversion.obj : error LNK2001: unresolved external symbol "__imp_version_compare4"
_libversion.obj : error LNK2001: unresolved external symbol "__imp_version_compare2"

Additional information

The C library libversion is installed as the following:

  1. C:\Program Files\libversion\lib\libversion.lib - the import library for load-time dynamic linking of the DLL. However, the DLL itself is not installed to the system.
  2. C:\Program Files\libversion\lib\version.lib - the static library.

The pkg-config file C:\Program Files\libversion\lib\pkgconfig\libversion.pc points to the second one (the static library version.lib). But it looks like only the first one (libversion.lib) contains the symbols __imp_version_compare4 and __imp_version_compare2.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions