PyCrypto builds neither with MSVC nor MinGW

Discussion in 'Python' started by Alec Taylor, Feb 5, 2012.

  1. Alec Taylor

    Alec Taylor Guest

    PIL, PyCrypto and many other modules require a C compiler and linker.

    Unfortunately neither install on my computer, with a PATH with the following:

    C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC
    C:\libraries\MinGW\msys\1.0\bin
    C:\libraries\MinGW
    C:\Python27\Scripts

    Output from G:\pycrypto>vcvarsall.bat
    Setting environment for using Microsoft Visual Studio 2010 x86 tools.

    Error output from G:\pycrypto>python setup.py build --compiler msvc
    http://pastebin.com/nBsuXDGg

    Error output from G:\pycrypto>python setup.py build --compiler mingw32
    1> log1 2> log2
    Log1: http://pastebin.com/yG3cbdZv
    Log2: http://pastebin.com/qvnshPeh

    Will there ever be support for newer MSVC versions? - Also, why
    doesn't even MinGW install PyCrypto for me?

    Thanks for all suggestions,

    Alec Taylor
    Alec Taylor, Feb 5, 2012
    #1
    1. Advertising

  2. Alec Taylor

    casevh Guest

    On Feb 5, 6:40 am, Alec Taylor <> wrote:
    > PIL, PyCrypto and many other modules require a C compiler and linker.
    >
    > Unfortunately neither install on my computer, with a PATH with the following:
    >
    > C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC
    > C:\libraries\MinGW\msys\1.0\bin
    > C:\libraries\MinGW
    > C:\Python27\Scripts
    >
    > Output from G:\pycrypto>vcvarsall.bat
    > Setting environment for using Microsoft Visual Studio 2010 x86 tools.
    >
    > Error output from G:\pycrypto>python setup.py build --compiler msvc
    > http://pastebin.com/nBsuXDGg

    A couple of comments. You will need to complile either GMP or MPIR
    first.

    MPIR is a windows friendly fork of GMP and I use it create Windows
    binaries
    for gmpy.
    >
    > Error output from G:\pycrypto>python setup.py build --compiler mingw32
    > 1> log1 2> log2
    > Log1:http://pastebin.com/yG3cbdZv
    > Log2:http://pastebin.com/qvnshPeh
    >
    > Will there ever be support for newer MSVC versions? - Also, why


    Python 2.7 uses VS2008. I use the command line compiler included with
    in
    Microsoft's SDK 7.0 which is still available for download. I have
    step-
    by-step build instructions included in gmpy's source download. I would
    try to build MPIR and gmpy first and then adapt/modify the process for
    PyCrypto.

    MPIR home page: www.mpir.org
    gmpy source: gmpy.googlecode.com/files/gmpy-1.15.zip

    > doesn't even MinGW install PyCrypto for me?
    >


    > Thanks for all suggestions,
    >
    > Alec Taylor

    Hope these comments help...
    casevh
    casevh, Feb 6, 2012
    #2
    1. Advertising

  3. Alec Taylor

    Alec Taylor Guest

    Thanks all for your replies.

    I have now installed MSVC8 and YASM.

    I was able to successfully run configure.bat and make.bat (including
    make.bat check).

    However, I'm unsure what to do about install, since there is no
    install arg. Do I copy it across to my VC\bin folder, or does it need
    it's own place in PATH + system variables?

    I am asking because I don't know where it is looking for the MPIR library.

    Thanks for all suggestions,

    Alec Taylor
    Alec Taylor, Feb 8, 2012
    #3
  4. On Tue, Feb 7, 2012 at 9:37 PM, Alec Taylor <> wrote:
    > Thanks all for your replies.
    >
    > I have now installed MSVC8 and YASM.

    I assume you installed Visual Studio. I've omitted the commands to use
    the SDK compiler below.
    >
    > I was able to successfully run configure.bat and make.bat (including
    > make.bat check).
    >
    > However, I'm unsure what to do about install, since there is no
    > install arg. Do I copy it across to my VC\bin folder, or does it need
    > it's own place in PATH + system variables?


    The following is just a guess.

    I copy the files to a convenient location and then specify that
    location to setup.py. Below is an excerpt from my build process.

    mkdir c:\src\lib
    mkdir c:\src\include
    xcopy /Y mpir.h c:\src\include\*.*
    xcopy /Y win\mpir.lib c:\src\lib\*.*

    python setup.py build_ext -Ic:\src\include -Lc:\src\lib install

    >
    > I am asking because I don't know where it is looking for the MPIR library.
    >
    > Thanks for all suggestions,
    >
    > Alec Taylor
    Case Van Horsen, Feb 8, 2012
    #4
  5. Alec Taylor

    Alec Taylor Guest

    Thanks, but to get it to work with pip, wouldn't I need to add it to
    PATH? - Or can I just add those library args to pip?

    On Wed, Feb 8, 2012 at 9:48 PM, Case Van Horsen <> wrote:
    > On Tue, Feb 7, 2012 at 9:37 PM, Alec Taylor <> wrote:
    >> Thanks all for your replies.
    >>
    >> I have now installed MSVC8 and YASM.

    > I assume you installed Visual Studio. I've omitted the commands to use
    > the SDK compiler below.
    >>
    >> I was able to successfully run configure.bat and make.bat (including
    >> make.bat check).
    >>
    >> However, I'm unsure what to do about install, since there is no
    >> install arg. Do I copy it across to my VC\bin folder, or does it need
    >> it's own place in PATH + system variables?

    >
    > The following is just a guess.
    >
    > I copy the files to a convenient location and then specify that
    > location to setup.py. Below is an excerpt from my build process.
    >
    > mkdir c:\src\lib
    > mkdir c:\src\include
    > xcopy /Y mpir.h c:\src\include\*.*
    > xcopy /Y win\mpir.lib c:\src\lib\*.*
    >
    > python setup.py build_ext -Ic:\src\include -Lc:\src\lib install
    >
    >>
    >> I am asking because I don't know where it is looking for the MPIR library.
    >>
    >> Thanks for all suggestions,
    >>
    >> Alec Taylor
    Alec Taylor, Feb 8, 2012
    #5
  6. On Wed, Feb 8, 2012 at 4:24 AM, Alec Taylor <> wrote:
    > Thanks, but to get it to work with pip, wouldn't I need to add it to
    > PATH? - Or can I just add those library args to pip?

    I don't think so. pyCrypto probably builds a single DLL so the MPIR library is
    statically linked into that DLL. Only the innvocation of setup.py should need
    to refer to the MPIR library locations. I don't use pip so I'm not sure how to
    get pip to install the resulting DLL, etc.
    >
    > On Wed, Feb 8, 2012 at 9:48 PM, Case Van Horsen <> wrote:
    >> On Tue, Feb 7, 2012 at 9:37 PM, Alec Taylor <> wrote:
    >>> Thanks all for your replies.
    >>>
    >>> I have now installed MSVC8 and YASM.

    >> I assume you installed Visual Studio. I've omitted the commands to use
    >> the SDK compiler below.
    >>>
    >>> I was able to successfully run configure.bat and make.bat (including
    >>> make.bat check).
    >>>
    >>> However, I'm unsure what to do about install, since there is no
    >>> install arg. Do I copy it across to my VC\bin folder, or does it need
    >>> it's own place in PATH + system variables?

    >>
    >> The following is just a guess.
    >>
    >> I copy the files to a convenient location and then specify that
    >> location to setup.py. Below is an excerpt from my build process.
    >>
    >> mkdir c:\src\lib
    >> mkdir c:\src\include
    >> xcopy /Y mpir.h c:\src\include\*.*
    >> xcopy /Y win\mpir.lib c:\src\lib\*.*
    >>
    >> python setup.py build_ext -Ic:\src\include -Lc:\src\lib install
    >>
    >>>
    >>> I am asking because I don't know where it is looking for the MPIR library.
    >>>
    >>> Thanks for all suggestions,
    >>>
    >>> Alec Taylor
    Case Van Horsen, Feb 8, 2012
    #6
  7. Alec Taylor

    Alec Taylor Guest

    On a brand new Windows install now, with a brand new VS8 installed
    with new YASM and MPIR in c:\usr\src\include and c:\usr\src\lib.

    But it still isn't working:

    C:\workingdir\pycrypto>python setup.py build_ext -Ic:\usr\src\include
    -Lc:\usr\src\lib install
    running build_ext
    warning: GMP or MPIR library not found; Not building Crypto.PublicKey._fastmath.

    building 'Crypto.Random.OSRNG.winrandom' extension
    Traceback (most recent call last):
    File "setup.py", line 452, in <module>
    core.setup(**kw)
    File "C:\Python27\lib\distutils\core.py", line 152, in setup
    dist.run_commands()
    File "C:\Python27\lib\distutils\dist.py", line 953, in run_commands
    self.run_command(cmd)
    File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
    File "setup.py", line 249, in run
    build_ext.run(self)
    File "C:\Python27\lib\distutils\command\build_ext.py", line 339, in run
    self.build_extensions()
    File "setup.py", line 146, in build_extensions
    build_ext.build_extensions(self)
    File "C:\Python27\lib\distutils\command\build_ext.py", line 448, in
    build_extensions
    self.build_extension(ext)
    File "C:\Python27\lib\distutils\command\build_ext.py", line 498, in
    build_extension
    depends=ext.depends)
    File "C:\Python27\lib\distutils\msvc9compiler.py", line 473, in compile
    self.initialize()
    File "C:\Python27\lib\distutils\msvc9compiler.py", line 383, in initialize
    vc_env = query_vcvarsall(VERSION, plat_spec)
    File "C:\Python27\lib\distutils\msvc9compiler.py", line 299, in
    query_vcvarsall
    raise ValueError(str(list(result.keys())))
    ValueError: [u'path']

    On Wed, Feb 8, 2012 at 11:31 PM, Case Van Horsen <> wrote:
    > On Wed, Feb 8, 2012 at 4:24 AM, Alec Taylor <> wrote:
    >> Thanks, but to get it to work with pip, wouldn't I need to add it to
    >> PATH? - Or can I just add those library args to pip?

    > I don't think so. pyCrypto probably builds a single DLL so the MPIR library is
    > statically linked into that DLL. Only the innvocation of setup.py should need
    > to refer to the MPIR library locations.  I don't use pip so I'm not sure how to
    > get pip to install the resulting DLL, etc.
    >>
    >> On Wed, Feb 8, 2012 at 9:48 PM, Case Van Horsen <> wrote:
    >>> On Tue, Feb 7, 2012 at 9:37 PM, Alec Taylor <> wrote:
    >>>> Thanks all for your replies.
    >>>>
    >>>> I have now installed MSVC8 and YASM.
    >>> I assume you installed Visual Studio. I've omitted the commands to use
    >>> the SDK compiler below.
    >>>>
    >>>> I was able to successfully run configure.bat and make.bat (including
    >>>> make.bat check).
    >>>>
    >>>> However, I'm unsure what to do about install, since there is no
    >>>> install arg. Do I copy it across to my VC\bin folder, or does it need
    >>>> it's own place in PATH + system variables?
    >>>
    >>> The following is just a guess.
    >>>
    >>> I copy the files to a convenient location and then specify that
    >>> location to setup.py. Below is an excerpt from my build process.
    >>>
    >>> mkdir c:\src\lib
    >>> mkdir c:\src\include
    >>> xcopy /Y mpir.h c:\src\include\*.*
    >>> xcopy /Y win\mpir.lib c:\src\lib\*.*
    >>>
    >>> python setup.py build_ext -Ic:\src\include -Lc:\src\lib install
    >>>
    >>>>
    >>>> I am asking because I don't know where it is looking for the MPIR library.
    >>>>
    >>>> Thanks for all suggestions,
    >>>>
    >>>> Alec Taylor
    Alec Taylor, Mar 12, 2012
    #7
  8. Alec Taylor

    Alec Taylor Guest

    FYI: When running "vcvarsall" manually, I get a variety of linker
    errors, even though I have the SDK and everything else installed:

    running build_ext
    building 'Crypto.Random.OSRNG.winrandom' extension
    C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c
    /nologo /Ox /MD /W3 /GS- /DNDEBUG -Isrc/ -Isrc/inc-msvc/
    -Ic:\usr\src\include -IC:\Python27\include -IC:\Python27\PC
    /Tcsrc/winrand.c /Fobuild\temp.win-amd64-2.7\Release\src/winrand.obj
    winrand.c
    C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\link.exe
    /DLL /nologo /INCREMENTAL:NO /LIBPATH:c:\usr\src\lib
    /LIBPATH:C:\Python27\libs /LIBPATH:C:\Python27\PCbuild\amd64
    ws2_32.lib advapi32.lib /EXPORT:initwinrandom
    build\temp.win-amd64-2.7\Release\src/winrand.obj
    /OUT:build\lib.win-amd64-2.7\Crypto\Random\OSRNG\winrandom.pyd
    /IMPLIB:build\temp.win-amd64-2.7\Release\src\winrandom.lib
    /MANIFESTFILE:build\temp.win-amd64-2.7\Release\src\winrandom.pyd.manifest
    Creating library build\temp.win-amd64-2.7\Release\src\winrandom.lib
    and object build\temp.win-amd64-2.7\Release\src\winrandom.exp
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyObject_Free referenced in function _WRdealloc
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyExc_SystemError referenced in function _WRdealloc
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyErr_Format referenced in function _WRdealloc
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyExc_TypeError referenced in function _WRdealloc
    winrand.obj : error LNK2019: unresolved external symbol
    __imp___PyObject_New referenced in function _winrandom_new
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyArg_ParseTupleAndKeywords referenced in function
    _winrandom_new
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyString_FromStringAndSize referenced in function _WR_get_bytes
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyMem_Free referenced in function _WR_get_bytes
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyErr_NoMemory referenced in function _WR_get_bytes
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyMem_Malloc referenced in function _WR_get_bytes
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyErr_SetString referenced in function _WR_get_bytes
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyExc_ValueError referenced in function _WR_get_bytes
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyArg_ParseTuple referenced in function _WR_get_bytes
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__Py_FindMethod referenced in function _WRgetattr
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyInt_FromLong referenced in function _WRgetattr
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__Py_FatalError referenced in function _initwinrandom
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyErr_Occurred referenced in function _initwinrandom
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyModule_AddStringConstant referenced in function
    _initwinrandom
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyModule_AddIntConstant referenced in function _initwinrandom
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__Py_InitModule4 referenced in function _initwinrandom
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyType_Type referenced in function _initwinrandom
    build\lib.win-amd64-2.7\Crypto\Random\OSRNG\winrandom.pyd : fatal
    error LNK1120: 21 unresolved externals
    Alec Taylor, Mar 12, 2012
    #8
  9. Alec Taylor

    Guest

    On Monday, March 12, 2012 1:38:29 PM UTC-7, Alec Taylor wrote:
    > On a brand new Windows install now, with a brand new VS8 installed
    > with new YASM and MPIR in c:\usr\src\include and c:\usr\src\lib.
    >
    > But it still isn't working:
    >

    This was a little challenging. I looked through the setup.py to figure out what assumptions their build process made. First, the file pycrypto-2.5\src\inc-msvc\config.h must be modified. Below is the file I used:

    config.h
    ===================================================================
    /* Define to 1 if you have the declaration of `mpz_powm', and to 0 if you
    don't. */
    #define HAVE_DECL_MPZ_POWM 1

    /* Define to 1 if you have the declaration of `mpz_powm_sec', and to 0 if you
    don't. */
    #define HAVE_DECL_MPZ_POWM_SEC 0

    /* Define to 1 if you have the `gmp' library (-lgmp). */
    #undef HAVE_LIBGMP

    /* Define to 1 if you have the `mpir' library (-lmpir). */
    #define HAVE_LIBMPIR 1

    /* Define to 1 if you have the <stdint.h> header file. */
    #define HAVE_STDINT_H 1
    ===================================================================

    Although I was able to specify an include directory for mpir.h with -Ic:\usr\include, I was not able specify a lib directory with -Lc:\usr\lib. It looks like setup.py does not honor the -L option. So I finally gave up and just copied the mpir.h file into my Python27\include directory and the mpir.lib file into my Python27\libs directory.

    After copying the files "python setup.py install" was successful. I createda binary installer with "python setup.py bdist-wininst".

    There may be a cleaner way to build PyCrypto, but these steps worked for me..

    casevh
    , Mar 13, 2012
    #9
  10. Alec Taylor

    Guest

    On Monday, March 12, 2012 1:38:29 PM UTC-7, Alec Taylor wrote:
    > On a brand new Windows install now, with a brand new VS8 installed
    > with new YASM and MPIR in c:\usr\src\include and c:\usr\src\lib.
    >
    > But it still isn't working:
    >

    This was a little challenging. I looked through the setup.py to figure out what assumptions their build process made. First, the file pycrypto-2.5\src\inc-msvc\config.h must be modified. Below is the file I used:

    config.h
    ===================================================================
    /* Define to 1 if you have the declaration of `mpz_powm', and to 0 if you
    don't. */
    #define HAVE_DECL_MPZ_POWM 1

    /* Define to 1 if you have the declaration of `mpz_powm_sec', and to 0 if you
    don't. */
    #define HAVE_DECL_MPZ_POWM_SEC 0

    /* Define to 1 if you have the `gmp' library (-lgmp). */
    #undef HAVE_LIBGMP

    /* Define to 1 if you have the `mpir' library (-lmpir). */
    #define HAVE_LIBMPIR 1

    /* Define to 1 if you have the <stdint.h> header file. */
    #define HAVE_STDINT_H 1
    ===================================================================

    Although I was able to specify an include directory for mpir.h with -Ic:\usr\include, I was not able specify a lib directory with -Lc:\usr\lib. It looks like setup.py does not honor the -L option. So I finally gave up and just copied the mpir.h file into my Python27\include directory and the mpir.lib file into my Python27\libs directory.

    After copying the files "python setup.py install" was successful. I createda binary installer with "python setup.py bdist-wininst".

    There may be a cleaner way to build PyCrypto, but these steps worked for me..

    casevh
    , Mar 13, 2012
    #10
  11. Alec Taylor

    Alec Taylor Guest

    Hmm, I just tried that method, but the output I got was still:

    C:\workingdir\pycrypto>python setup.py install
    running install
    running build
    running build_py
    running build_ext
    building 'Crypto.Random.OSRNG.winrandom' extension
    Traceback (most recent call last):
    File "setup.py", line 452, in <module>
    core.setup(**kw)
    File "C:\Python27\lib\distutils\core.py", line 152, in setup
    dist.run_commands()
    File "C:\Python27\lib\distutils\dist.py", line 953, in run_commands
    self.run_command(cmd)
    File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
    File "C:\Python27\lib\distutils\command\install.py", line 563, in run
    self.run_command('build')
    File "C:\Python27\lib\distutils\cmd.py", line 326, in run_command
    self.distribution.run_command(command)
    File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
    File "C:\Python27\lib\distutils\command\build.py", line 127, in run
    self.run_command(cmd_name)
    File "C:\Python27\lib\distutils\cmd.py", line 326, in run_command
    self.distribution.run_command(command)
    File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
    File "setup.py", line 249, in run
    build_ext.run(self)
    File "C:\Python27\lib\distutils\command\build_ext.py", line 339, in run
    self.build_extensions()
    File "setup.py", line 146, in build_extensions
    build_ext.build_extensions(self)
    File "C:\Python27\lib\distutils\command\build_ext.py", line 448, in
    build_extensions
    self.build_extension(ext)
    File "C:\Python27\lib\distutils\command\build_ext.py", line 498, in
    build_extension
    depends=ext.depends)
    File "C:\Python27\lib\distutils\msvc9compiler.py", line 473, in compile
    self.initialize()
    File "C:\Python27\lib\distutils\msvc9compiler.py", line 383, in initialize
    vc_env = query_vcvarsall(VERSION, plat_spec)
    File "C:\Python27\lib\distutils\msvc9compiler.py", line 299, in
    query_vcvarsall
    raise ValueError(str(list(result.keys())))
    ValueError: [u'path']

    --------------
    and when I manually run vcvarsall (which is in PATH), I get the
    aforementioned linker errors:
    --------------

    C:\workingdir\pycrypto>python setup.py install
    running install
    running build
    running build_py
    running build_ext
    building 'Crypto.Random.OSRNG.winrandom' extension
    C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c
    /nologo /Ox /MD /W3 /GS- /DNDEBUG -Isrc/ -Isrc/inc-msvc/
    -IC:\Python27\include -IC:\Python27 \PC /Tcsrc/winrand.c
    /Fobuild\temp.win-amd64-2.7\Release\src/winrand.obj winrand.c
    C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\link.exe
    /DLL /nologo /INCREMENTAL:NO /LIBPATH:C:\Python27\libs
    /LIBPATH:C:\Python27\PCbuild\amd64 ws2 _32.lib advapi32.lib
    /EXPORT:initwinrandom build\temp.win-amd64-2.7\Release\src/
    winrand.obj /OUT:build\lib.win-amd64-2.7\Crypto\Random\OSRNG\winrandom.pyd /IMPL
    IB:build\temp.win-amd64-2.7\Release\src\winrandom.lib
    /MANIFESTFILE:build\temp.win-amd64-2.7\Release\src\winrandom.pyd.manifest
    Creating library build\temp.win-amd64-2.7\Release\src\winrandom.lib
    and object build\temp.win-amd64-2.7\Release\src\winrandom.exp
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyObject_Free referenced in function _WRdealloc
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyExc_SystemError referenced in function _WRdealloc
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyErr_Format referenced in function _WRdealloc
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyExc_TypeError referenced in function _WRdealloc
    winrand.obj : error LNK2019: unresolved external symbol
    __imp___PyObject_New referenced in function _winrandom_new
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyArg_ParseTupleAndKeywords referenced in function
    _winrandom_new
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyString_FromStringAndSize referenced in function _WR_get_bytes
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyMem_Free referenced in function _WR_get_bytes
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyErr_NoMemory referenced in function _WR_get_bytes
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyMem_Malloc referenced in function _WR_get_bytes
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyErr_SetString referenced in function _WR_get_bytes
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyExc_ValueError referenced in function _WR_get_bytes
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyArg_ParseTuple referenced in function _WR_get_bytes
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__Py_FindMethod referenced in function _WRgetattr
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyInt_FromLong referenced in function _WRgetattr
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__Py_FatalError referenced in function _initwinrandom
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyErr_Occurred referenced in function _initwinrandom
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyModule_AddStringConstant referenced in function
    _initwinrandom
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyModule_AddIntConstant referenced in function _initwinrandom
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__Py_InitModule4 referenced in function _initwinrandom
    winrand.obj : error LNK2019: unresolved external symbol
    __imp__PyType_Type referenced in function _initwinrandom
    build\lib.win-amd64-2.7\Crypto\Random\OSRNG\winrandom.pyd : fatal error LNK1120:
    21 unresolved externals
    error: command '"C:\Program Files (x86)\Microsoft Visual Studio
    9.0\VC\BIN\link.exe"' failed with exit status 1120

    On Tue, Mar 13, 2012 at 2:59 PM, <> wrote:
    > On Monday, March 12, 2012 1:38:29 PM UTC-7, Alec Taylor wrote:
    >> On a brand new Windows install now, with a brand new VS8 installed
    >> with new YASM and MPIR in c:\usr\src\include and c:\usr\src\lib.
    >>
    >> But it still isn't working:
    >>

    > This was a little challenging. I looked through the setup.py to figure out what assumptions their build process made. First, the file pycrypto-2.5\src\inc-msvc\config.h must be modified. Below is the file I used:
    >
    > config.h
    > ===================================================================
    > /* Define to 1 if you have the declaration of `mpz_powm', and to 0 if you
    >   don't. */
    > #define HAVE_DECL_MPZ_POWM 1
    >
    > /* Define to 1 if you have the declaration of `mpz_powm_sec', and to 0 ifyou
    >   don't. */
    > #define HAVE_DECL_MPZ_POWM_SEC 0
    >
    > /* Define to 1 if you have the `gmp' library (-lgmp). */
    > #undef HAVE_LIBGMP
    >
    > /* Define to 1 if you have the `mpir' library (-lmpir). */
    > #define HAVE_LIBMPIR 1
    >
    > /* Define to 1 if you have the <stdint.h> header file. */
    > #define HAVE_STDINT_H 1
    > ===================================================================
    >
    > Although I was able to specify an include directory for mpir.h with -Ic:\usr\include, I was not able specify a lib directory with -Lc:\usr\lib. It looks like setup.py does not honor the -L option. So I finally gave up and just copied the mpir.h file into my Python27\include directory and the mpir.lib file into my Python27\libs directory.
    >
    > After copying the files "python setup.py install" was successful. I created a binary installer with "python setup.py bdist-wininst".
    >
    > There may be a cleaner way to build PyCrypto, but these steps worked for me.
    >
    > casevh
    > --
    > http://mail.python.org/mailman/listinfo/python-list
    Alec Taylor, Mar 13, 2012
    #11
  12. Alec Taylor

    Alec Taylor Guest

    Nope, I have C:\Python27 (and C:\Python27\Scripts) in my PATH.

    C:\workingdir\pycrypto>where python
    C:\Python27\python.exe

    On Tue, Mar 13, 2012 at 4:44 PM, Case Van Horsen <> wrote:
    > On Mon, Mar 12, 2012 at 9:57 PM, Alec Taylor <> wrote:
    >> Hmm, I just tried that method, but the output I got was still:
    >>
    >> C:\workingdir\pycrypto>python setup.py install
    >> running install
    >> running build
    >> running build_py
    >> running build_ext
    >> building 'Crypto.Random.OSRNG.winrandom' extension
    >> Traceback (most recent call last):
    >>  File "setup.py", line 452, in <module>
    >>    core.setup(**kw)
    >>  File "C:\Python27\lib\distutils\core.py", line 152, in setup
    >>    dist.run_commands()
    >>  File "C:\Python27\lib\distutils\dist.py", line 953, in run_commands
    >>    self.run_command(cmd)
    >>  File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    >>    cmd_obj.run()
    >>  File "C:\Python27\lib\distutils\command\install.py", line 563, in run
    >>    self.run_command('build')
    >>  File "C:\Python27\lib\distutils\cmd.py", line 326, in run_command
    >>    self.distribution.run_command(command)
    >>  File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    >>    cmd_obj.run()
    >>  File "C:\Python27\lib\distutils\command\build.py", line 127, in run
    >>    self.run_command(cmd_name)
    >>  File "C:\Python27\lib\distutils\cmd.py", line 326, in run_command
    >>    self.distribution.run_command(command)
    >>  File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    >>    cmd_obj.run()
    >>  File "setup.py", line 249, in run
    >>    build_ext.run(self)
    >>  File "C:\Python27\lib\distutils\command\build_ext.py", line 339, in run
    >>    self.build_extensions()
    >>  File "setup.py", line 146, in build_extensions
    >>    build_ext.build_extensions(self)
    >>  File "C:\Python27\lib\distutils\command\build_ext.py", line 448, in
    >> build_extensions
    >>    self.build_extension(ext)
    >>  File "C:\Python27\lib\distutils\command\build_ext.py", line 498, in
    >> build_extension
    >>    depends=ext.depends)
    >>  File "C:\Python27\lib\distutils\msvc9compiler.py", line 473, in compile
    >>    self.initialize()
    >>  File "C:\Python27\lib\distutils\msvc9compiler.py", line 383, in initialize
    >>    vc_env = query_vcvarsall(VERSION, plat_spec)
    >>  File "C:\Python27\lib\distutils\msvc9compiler.py", line 299, in
    >> query_vcvarsall
    >>    raise ValueError(str(list(result.keys())))
    >> ValueError: [u'path']
    >>
    >> --------------
    >> and when I manually run vcvarsall (which is in PATH), I get the
    >> aforementioned linker errors:
    >> --------------
    >>
    >> C:\workingdir\pycrypto>python setup.py install
    >> running install
    >> running build
    >> running build_py
    >> running build_ext
    >> building 'Crypto.Random.OSRNG.winrandom' extension
    >> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\cl.exe /c
    >> /nologo /Ox /MD /W3 /GS- /DNDEBUG -Isrc/ -Isrc/inc-msvc/
    >> -IC:\Python27\include -IC:\Python27 \PC /Tcsrc/winrand.c
    >> /Fobuild\temp.win-amd64-2.7\Release\src/winrand.obj winrand.c
    >> C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\link.exe
    >> /DLL /nologo /INCREMENTAL:NO /LIBPATH:C:\Python27\libs
    >> /LIBPATH:C:\Python27\PCbuild\amd64 ws2 _32.lib advapi32.lib
    >> /EXPORT:initwinrandom build\temp.win-amd64-2.7\Release\src/
    >> winrand.obj /OUT:build\lib.win-amd64-2.7\Crypto\Random\OSRNG\winrandom.pyd /IMPL
    >> IB:build\temp.win-amd64-2.7\Release\src\winrandom.lib
    >> /MANIFESTFILE:build\temp.win-amd64-2.7\Release\src\winrandom.pyd.manifest
    >>   Creating library build\temp.win-amd64-2.7\Release\src\winrandom.lib
    >> and object build\temp.win-amd64-2.7\Release\src\winrandom.exp
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyObject_Free referenced in function _WRdealloc
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyExc_SystemError referenced in function _WRdealloc
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyErr_Format referenced in function _WRdealloc
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyExc_TypeError referenced in function _WRdealloc
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp___PyObject_New referenced in function _winrandom_new
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyArg_ParseTupleAndKeywords referenced in function
    >> _winrandom_new
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyString_FromStringAndSize referenced in function _WR_get_bytes
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyMem_Free referenced in function _WR_get_bytes
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyErr_NoMemory referenced in function _WR_get_bytes
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyMem_Malloc referenced in function _WR_get_bytes
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyErr_SetString referenced in function _WR_get_bytes
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyExc_ValueError referenced in function _WR_get_bytes
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyArg_ParseTuple referenced in function _WR_get_bytes
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__Py_FindMethod referenced in function _WRgetattr
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyInt_FromLong referenced in function _WRgetattr
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__Py_FatalError referenced in function _initwinrandom
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyErr_Occurred referenced in function _initwinrandom
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyModule_AddStringConstant referenced in function
    >> _initwinrandom
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyModule_AddIntConstant referenced in function _initwinrandom
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__Py_InitModule4 referenced in function _initwinrandom
    >> winrand.obj : error LNK2019: unresolved external symbol
    >> __imp__PyType_Type referenced in function _initwinrandom
    >> build\lib.win-amd64-2.7\Crypto\Random\OSRNG\winrandom.pyd : fatal error LNK1120:
    >>  21 unresolved externals
    >> error: command '"C:\Program Files (x86)\Microsoft Visual Studio
    >> 9.0\VC\BIN\link.exe"' failed with exit status 1120
    >>

    >
    > It almost seems that python can't find all its files. Are you using a
    > macro or batch file to invoke python. I actually used
    >
    > "c:\x64\Python27\python.exe setup.py install"
    >
    > IIRC, I've had issues with a DOSKEY macro before so now I explicitly
    > use the full path to python.exe.
    >
    > Otherwise I'm stumped.
    >> On Tue, Mar 13, 2012 at 2:59 PM,  <> wrote:
    >>> On Monday, March 12, 2012 1:38:29 PM UTC-7, Alec Taylor wrote:
    >>>> On a brand new Windows install now, with a brand new VS8 installed
    >>>> with new YASM and MPIR in c:\usr\src\include and c:\usr\src\lib.
    >>>>
    >>>> But it still isn't working:
    >>>>
    >>> This was a little challenging. I looked through the setup.py to figure out what assumptions their build process made. First, the file pycrypto-2.5\src\inc-msvc\config.h must be modified. Below is the file I used:
    >>>
    >>> config.h
    >>> ===================================================================
    >>> /* Define to 1 if you have the declaration of `mpz_powm', and to 0 if you
    >>>   don't. */
    >>> #define HAVE_DECL_MPZ_POWM 1
    >>>
    >>> /* Define to 1 if you have the declaration of `mpz_powm_sec', and to 0 if you
    >>>   don't. */
    >>> #define HAVE_DECL_MPZ_POWM_SEC 0
    >>>
    >>> /* Define to 1 if you have the `gmp' library (-lgmp). */
    >>> #undef HAVE_LIBGMP
    >>>
    >>> /* Define to 1 if you have the `mpir' library (-lmpir). */
    >>> #define HAVE_LIBMPIR 1
    >>>
    >>> /* Define to 1 if you have the <stdint.h> header file. */
    >>> #define HAVE_STDINT_H 1
    >>> ===================================================================
    >>>
    >>> Although I was able to specify an include directory for mpir.h with -Ic:\usr\include, I was not able specify a lib directory with -Lc:\usr\lib. Itlooks like setup.py does not honor the -L option. So I finally gave up andjust copied the mpir.h file into my Python27\include directory and the mpir.lib file into my Python27\libs directory.
    >>>
    >>> After copying the files "python setup.py install" was successful. I created a binary installer with "python setup.py bdist-wininst".
    >>>
    >>> There may be a cleaner way to build PyCrypto, but these steps worked for me.
    >>>
    >>> casevh
    >>> --
    >>> http://mail.python.org/mailman/listinfo/python-list
    Alec Taylor, Mar 13, 2012
    #12
  13. Alec Taylor

    Alec Taylor Guest

    Oh wait, just realised it was loading the (x86) tools. Doing a quick
    search I noticed that I didn't have the x64 components installed, so
    loading up the MSVC08 setup again and installing it, then:
    copying vcvarsamd64.bat to vcvarsall.bat and adding its directory
    (C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\) to
    PATH....

    AND IT WORKS!

    =D
    Alec Taylor, Mar 14, 2012
    #13
  14. Alec Taylor

    bikewave Guest

    I also had the unresolved externals problem (not the mdir.h problem, though)
    and my solution was different.
    a) reinstall correct python2.6.4, using an Intel-flavor msi vice
    AMD64-flavor
    b) source the c:\program files(x86\microsoft visual studio
    9.0\vc\bin\vcvars32.bat
    and shazzaaaam the pycrypto build + install worked fine.
    My CPU is Intel not AMD so I apparently had a bogus python install.



    --
    View this message in context: http://python.6.n6.nabble.com/PyCrypto-builds-neither-with-MSVC-nor-MinGW-tp4366880p4986058.html
    Sent from the Python - python-list mailing list archive at Nabble.com.
    bikewave, Aug 22, 2012
    #14
  15. Alec Taylor

    Dave Angel Guest

    On 08/22/2012 02:21 PM, bikewave wrote:
    > I also had the unresolved externals problem (not the mdir.h problem, though)
    > and my solution was different.
    > a) reinstall correct python2.6.4, using an Intel-flavor msi vice
    > AMD64-flavor
    > b) source the c:\program files(x86\microsoft visual studio
    > 9.0\vc\bin\vcvars32.bat
    > and shazzaaaam the pycrypto build + install worked fine.
    > My CPU is Intel not AMD so I apparently had a bogus python install.
    >


    For most open-software distributions:

    AMD64 is the 64 bit build for both AMD and Intel. Probably referred to
    as AMD64 because AMD had a compatible 64 bit processor while Intel was
    still fooling around with Merced for its 64 bit stuff.

    X86 is the 32 bit build for both AMD and Intel.

    --

    DaveA
    Dave Angel, Aug 22, 2012
    #15
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Luigi Donatello Asero

    A text which neither gets very narrow nor disappears

    Luigi Donatello Asero, Oct 3, 2005, in forum: HTML
    Replies:
    21
    Views:
    851
    Jonathan N. Little
    Jan 6, 2006
  2. -berlin.de
    Replies:
    7
    Views:
    1,058
    Richard Tobin
    Feb 26, 2007
  3. pabbu
    Replies:
    8
    Views:
    708
    Marc Boyer
    Nov 7, 2005
  4. Valery Khamenya
    Replies:
    3
    Views:
    702
  5. Jerry Hill
    Replies:
    0
    Views:
    474
    Jerry Hill
    Oct 4, 2008
Loading...

Share This Page