Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pywafo can not be compiled on windows #26

Closed
eelcovv opened this issue Jun 24, 2016 · 6 comments
Closed

pywafo can not be compiled on windows #26

eelcovv opened this issue Jun 24, 2016 · 6 comments

Comments

@eelcovv
Copy link

eelcovv commented Jun 24, 2016

I have used the latest version of pywafo. I need to have the compiled version since I need the cylce_astm routine. In order to compile the libary I have run

python setup.py bdist_wheel -d build

I have both the mingw compiler and the microsoft visual studio C++ compiler installed, but I can not find how to choose which version should be used and even can not see which version is being used.

I get an error message related to not be able to read the python27.dll

I have included the total outpyt to the log.txt file.

Key message I think is the first warning saying:
Building import library (arch=AMD64): "C:\Apps\Anaconda\Anaconda250\libs\libpython27.a" (from C:\Apps\Anaconda\Anaconda250\python27.dll)
objdump.exe: C:\Apps\Anaconda\Anaconda250\python27.dll: File format not recognized
Traceback (most recent call last):
File "setup.py", line 83, in
setup_package_pyscaffold()

etc.
File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\mingw32ccompiler.py", line 276, in generate_def
raise ValueError("Symbol table not found")
ValueError: Symbol table not found

so somehow the python27.dll is not recognised, which I though was related to the mingw compiler.

The question is: how can I fix this or how can I ensure that the CL compiler (msvC++) is used ?

Hopefully you can help me!

Regards
Eelco

log.txt

@pbrod
Copy link
Member

pbrod commented Jun 24, 2016

The mingw toolchain to compile the fortran extensions in pywafo on windows is broken at the moment. However, it is possible to compile only the c-extensions with a microsoft compiler.

To make sure you use the microsoft compiler you can try this:
Make a "distutils.cfg" file in "C:\python\Anaconda2\lib\distutils"
and add the following 2 lines to it:

[build]
compiler=msvc

You can then try to run the following in a dos-prompt:
python setup.py bdist_wheel -d build

If that does not work you can go to "c:\wafo\source\c_library" folder and run the following in a dos-prompt:

python build_all.py

and the manually copy the c_library.pyd file to the "c:\wafo" folder.

@eelcovv
Copy link
Author

eelcovv commented Jun 24, 2016

Hi Per,

Thank you very much for your reply. I have the feeling that I am getting
closer, but I still get an error.

I did what you told me (adding the distutils.cfg with compiler=msvc (btw:
the compiler runs with the command cl.exe, should msvc maybe be cl?)

Anyway, the first command does not work

The second one with python build_all.py give the log as in the log.txt file

Errors start to be raised from

Building import library (arch=AMD64):
"C:\Apps\Anaconda\Anaconda250\libs\libpython27.a" (from
C:\Apps\Anaconda\Anaconda250\python27.dll)
objdump.exe: C:\Apps\Anaconda\Anaconda250\python27.dll: File format not
recognized
Traceback (most recent call last):
File "C:\Apps\Anaconda\Anaconda250\Scripts\f2py.py", line 28, in
main()

I read somewhere on a mingw side that the libpython27.a should be generated
from the python27.dll file. Does that make sense to you ?

Would you have a clue to fix this ?

Any hints appreciated!

Regards
Eelco

2016-06-24 14:57 GMT+02:00 Per A. Brodtkorb notifications@github.com:

The mingw toolchain to compile the fortran extensions in pywafo on windows
is broken at the moment. However, it is possible to compile only the
c-extensions with a microsoft compiler.

To make sure you use the microsoft compiler you can try this:
Make a "distutils.cfg" file in "C:\python\Anaconda2\lib\distutils"
and add the following 2 lines to it:

[build]
compiler=msvc

You can then try to run the following in a dos-prompt:
python setup.py bdist_wheel -d build

If that does not work you can go to "c:\wafo\source\c_library" folder and
run the following in a dos-prompt:

python build_all.py

and the manually copy the c_library.pyd file to the "c:\wafo" folder.


You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
#26 (comment),
or mute the thread
https://github.com/notifications/unsubscribe/ACtgoOtc5ZUNTvx3OLMbYPylBsVgd8uxks5qO9QtgaJpZM4I9uQd
.

running build
running config_cc
unifing config_cc, config, build_clib, build_ext, build commands --compiler options
running config_fc
unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options
running build_src
build_src
building extension "c_library" sources
creating c:\users\eelcovv\appdata\local\temp\tmpgf13m3\src.win-amd64-2.7
f2py options: []
f2py: c_library.pyf
Reading fortran codes...
Reading file 'c_library.pyf' (format:free)
Line #6 in c_library.pyf:" intent(c) "
All arguments will have attribute intent(c)
Line #15 in c_library.pyf:" intent(c) "
All arguments will have attribute intent(c)
Line #26 in c_library.pyf:" intent(c) "
All arguments will have attribute intent(c)
Line #37 in c_library.pyf:" intent(c) "
All arguments will have attribute intent(c)
Line #53 in c_library.pyf:" intent(c) "
All arguments will have attribute intent(c)
Line #71 in c_library.pyf:" intent(c) "
All arguments will have attribute intent(c)
Post-processing...
Block: c_library
Block: findrfc
Block: findcross
{'attrspec': ['intent(c)']}
In: c_library.pyf:c_library:unknown_interface:disufq
vars2fortran: No typespec for argument "m".
{'attrspec': ['intent(c)']}
In: c_library.pyf:c_library:unknown_interface:disufq
vars2fortran: No typespec for argument "n".
Block: disufq
{'attrspec': ['intent(c)']}
In: c_library.pyf:c_library:unknown_interface:disufq2
vars2fortran: No typespec for argument "m".
{'attrspec': ['intent(c)']}
In: c_library.pyf:c_library:unknown_interface:disufq2
vars2fortran: No typespec for argument "n".
Block: disufq2
Block: findrfc3_astm
Block: findrfc5_astm
Post-processing (stage 2)...
Building modules...
Building module "c_library"...
Constructing wrapper function "findrfc"...
ind,info = findrfc(y1,hmin)
Constructing wrapper function "findcross"...
ind,info = findcross(y,v)
Constructing wrapper function "disufq"...
rvec,ivec = disufq(rA,iA,w,kw,h,g,nmin,nmax,m,[n])
Constructing wrapper function "disufq2"...
rsvec,isvec,rdvec,idvec = disufq2(rA,iA,w,kw,h,g,nmin,nmax,m,[n])
Constructing wrapper function "findrfc3_astm"...
array_out,nout = findrfc3_astm(array_ext)
Constructing wrapper function "findrfc5_astm"...
array_out,nout = findrfc5_astm(array_ext,array_t)
Wrote C/API module "c_library" to file "c:\users\eelcovv\appdata\local\temp\tmpgf13m3\src.win-amd64-2.7\c_librarymodule.c"
adding 'c:\users\eelcovv\appdata\local\temp\tmpgf13m3\src.win-amd64-2.7\fortranobject.c' to sources.
adding 'c:\users\eelcovv\appdata\local\temp\tmpgf13m3\src.win-amd64-2.7' to include_dirs.
copying C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\f2py\src\fortranobject.c -> c:\users\eelcovv\appdata\local\temp\tmpgf13m3\src.win-amd64-2.7
copying C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\f2py\src\fortranobject.h -> c:\users\eelcovv\appdata\local\temp\tmpgf13m3\src.win-amd64-2.7
build_src: building npy-pkg config files
running build_ext
Looking for python27.dll
Building import library (arch=AMD64): "C:\Apps\Anaconda\Anaconda250\libs\libpython27.a" (from C:\Apps\Anaconda\Anaconda250\python27.dll)
objdump.exe: C:\Apps\Anaconda\Anaconda250\python27.dll: File format not recognized
Traceback (most recent call last):
File "C:\Apps\Anaconda\Anaconda250\Scripts\f2py.py", line 28, in
main()
File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\f2py\f2py2e.py", line 648, in main
run_compile()
File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\f2py\f2py2e.py", line 633, in run_compile
setup(ext_modules=[ext])
File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\core.py", line 169, in setup
return old_setup(**new_attr)
File "C:\Apps\Anaconda\Anaconda250\lib\distutils\core.py", line 151, in setup
dist.run_commands()
File "C:\Apps\Anaconda\Anaconda250\lib\distutils\dist.py", line 953, in run_commands
self.run_command(cmd)
File "C:\Apps\Anaconda\Anaconda250\lib\distutils\dist.py", line 972, in run_command
cmd_obj.run()
File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\command\build.py", line 47, in run
old_build.run(self)
File "C:\Apps\Anaconda\Anaconda250\lib\distutils\command\build.py", line 127, in run
self.run_command(cmd_name)
File "C:\Apps\Anaconda\Anaconda250\lib\distutils\cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "C:\Apps\Anaconda\Anaconda250\lib\distutils\dist.py", line 972, in run_command
cmd_obj.run()
File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\command\build_ext.py", line 117, in run
force=self.force)
File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\ccompiler.py", line 597, in new_compiler
compiler = klass(None, dry_run, force)
File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\mingw32ccompiler.py", line 93, in init
build_import_library()
File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\mingw32ccompiler.py", line 379, in build_import_library
return _build_import_library_amd64()
File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\mingw32ccompiler.py", line 401, in _build_import_library_amd64
generate_def(dll_file, def_file)
File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\mingw32ccompiler.py", line 276, in generate_def
raise ValueError("Symbol table not found")
ValueError: Symbol table not found
C:\Apps\Anaconda\Anaconda250\lib\site-packages\wafo\spectrum\core.py:35: UserWarning: Compile the c_library.pyd again!
warnings.warn('Compile the c_library.pyd again!')
C:\Apps\Anaconda\Anaconda250\lib\site-packages\wafo\spectrum\core.py:40: UserWarning: Compile the cov2mod.pyd again!
warnings.warn('Compile the cov2mod.pyd again!')

found f2py in: C:\Apps\Anaconda\Anaconda250\Scripts\f2py.py

compiling c_codes

@pbrod
Copy link
Member

pbrod commented Jun 24, 2016

@davidovitch davidovitch mentioned this issue Jun 24, 2016
@eelcovv
Copy link
Author

eelcovv commented Jun 25, 2016

Hi Per,

Excellent, I fixed this problem. I was able to compile the c_library I have installed the microsoft visual c compiler for widows (link above). Also I had already installed mingw, which I think is needed for gfortran

Then I did the following command :

python setup.py build --compiler=msvc

This runs but end with an error message

compiling C sources
C:\Users\eelcovv\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -Ibuild\src.win-amd64-2.7 -IC:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\core\include -IC:\Apps\Anaconda\Anaconda250\include -IC:\Apps\Anaconda\Anaconda250\PC /Tcbuild\src.win-amd64-2.7\wafo\source\mvn\mvnmodule.c /Fobuild\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\wafo\source\mvn\mvnmodule.obj
Found executable C:\Users\eelcovv\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe
C:\Users\eelcovv\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -Ibuild\src.win-amd64-2.7 -IC:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\core\include -IC:\Apps\Anaconda\Anaconda250\include -IC:\Apps\Anaconda\Anaconda250\PC /Tcbuild\src.win-amd64-2.7\fortranobject.c /Fobuild\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\fortranobject.obj
compiling Fortran sources
Fortran f77 compiler: C:\MinGW\bin\gfortran.exe -Wall -g -ffixed-form -fno-second-underscore -O0
Fortran f90 compiler: C:\MinGW\bin\gfortran.exe -Wall -g -fno-second-underscore -O0
Fortran fix compiler: C:\MinGW\bin\gfortran.exe -Wall -g -ffixed-form -fno-second-underscore -Wall -g -fno-second-underscore -O0
compile options: '-Ibuild\src.win-amd64-2.7 -IC:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\core\include -IC:\Apps\Anaconda\Anaconda250\include -IC:\Apps\Anaconda\Anaconda250\PC -c'
gfortran.exe:f77: wafo\source\mvn\mvndst.f
gfortran.exe:f77: build\src.win-amd64-2.7\wafo\source\mvn\mvn-f2pywrappers.f
C:\Users\eelcovv\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:c:\mingw\lib\gcc\mingw32\4.8.1 /LIBPATH:C:\Apps\Anaconda\Anaconda250\libs /LIBPATH:C:\Apps\Anaconda\Anaconda250\PCbuild\amd64 /LIBPATH:C:\Apps\Anaconda\Anaconda250\PC\VS9.0\amd64 /LIBPATH:build\temp.win-amd64-2.7 /LIBPATH:C:\Apps\Anaconda\Anaconda250\libs /LIBPATH:C:\Apps\Anaconda\Anaconda250\PCbuild\amd64 /LIBPATH:C:\Apps\Anaconda\Anaconda250\PC\VS9.0\amd64 /LIBPATH:build\temp.win-amd64-2.7 /EXPORT:initmvn build\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\wafo\source\mvn\mvnmodule.obj build\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\fortranobject.obj build\temp.win-amd64-2.7\Release\wafo\source\mvn\mvndst.o build\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\wafo\source\mvn\mvn-f2pywrappers.o /OUT:build\lib.win-amd64-2.7\wafo\mvn.pyd /IMPLIB:build\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\wafo\source\mvn\mvn.lib /MANIFESTFILE:build\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\wafo\source\mvn\mvn.pyd.manifest
Found executable C:\Users\eelcovv\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\link.exe
build\temp.win-amd64-2.7\Release\wafo\source\mvn\mvndst.o : fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'
error: Command "C:\Users\eelcovv\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\VC\Bin\amd64\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:c:\mingw\lib\gcc\mingw32\4.8.1 /LIBPATH:C:\Apps\Anaconda\Anaconda250\libs /LIBPATH:C:\Apps\Anaconda\Anaconda250\PCbuild\amd64 /LIBPATH:C:\Apps\Anaconda\Anaconda250\PC\VS9.0\amd64 /LIBPATH:build\temp.win-amd64-2.7 /LIBPATH:C:\Apps\Anaconda\Anaconda250\libs /LIBPATH:C:\Apps\Anaconda\Anaconda250\PCbuild\amd64 /LIBPATH:C:\Apps\Anaconda\Anaconda250\PC\VS9.0\amd64 /LIBPATH:build\temp.win-amd64-2.7 /EXPORT:initmvn build\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\wafo\source\mvn\mvnmodule.obj build\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\fortranobject.obj build\temp.win-amd64-2.7\Release\wafo\source\mvn\mvndst.o build\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\wafo\source\mvn\mvn-f2pywrappers.o /OUT:build\lib.win-amd64-2.7\wafo\mvn.pyd /IMPLIB:build\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\wafo\source\mvn\mvn.lib /MANIFESTFILE:build\temp.win-amd64-2.7\Release\build\src.win-amd64-2.7\wafo\source\mvn\mvn.pyd.manifest" failed with exit status 1112

Anyway, still the c_library.pyd was created.
If I run python setup.py install I get the same error message as before:

Looking for python27.dll
Building import library (arch=AMD64): "C:\Apps\Anaconda\Anaconda250\libs\libpython27.a" (from C:\Apps\Anaconda\Anaconda250\python27.dll)
objdump.exe: C:\Apps\Anaconda\Anaconda250\python27.dll: File format not recognized
Traceback (most recent call last):
  File "setup.py", line 83, in <module>
    setup_package_pyscaffold()
  File "setup.py", line 79, in setup_package_pyscaffold
    **config.todict())
  File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\core.py", line 169, in setup
    return old_setup(**new_attr)
  File "C:\Apps\Anaconda\Anaconda250\lib\distutils\core.py", line 151, in setup
    dist.run_commands()
  File "C:\Apps\Anaconda\Anaconda250\lib\distutils\dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "C:\Apps\Anaconda\Anaconda250\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\command\install.py", line 62, in run
    r = self.setuptools_run()
  File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\command\install.py", line 56, in setuptools_run
    self.do_egg_install()
  File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\setuptools\command\install.py", line 109, in do_egg_install
    self.run_command('bdist_egg')
  File "C:\Apps\Anaconda\Anaconda250\lib\distutils\cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "C:\Apps\Anaconda\Anaconda250\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\setuptools\command\bdist_egg.py", line 160, in run
    self.run_command('build_clib')
  File "C:\Apps\Anaconda\Anaconda250\lib\distutils\cmd.py", line 326, in run_command
    self.distribution.run_command(command)
  File "C:\Apps\Anaconda\Anaconda250\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\command\build_clib.py", line 83, in run
    force=self.force)
  File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\ccompiler.py", line 597, in new_compiler
    compiler = klass(None, dry_run, force)
  File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\mingw32ccompiler.py", line 93, in __init__
    build_import_library()
  File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\mingw32ccompiler.py", line 379, in build_import_library
    return _build_import_library_amd64()
  File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\mingw32ccompiler.py", line 401, in _build_import_library_amd64
    generate_def(dll_file, def_file)
  File "C:\Apps\Anaconda\Anaconda250\lib\site-packages\numpy\distutils\mingw32ccompiler.py", line 276, in generate_def
    raise ValueError("Symbol table not found")
ValueError: Symbol table not found

However, I I just copy the c_library.pyd manualy from the build directory to the wafo directory the file can be found and I can now run the script using the rainflow cycle_astm again!

So altough the setup script is not working out of the box, I could finally fix it, which is a releave

Thanks for the help !

If you want I have an exampe rain_flow_example.py script which I added to the tutorials which is using this cycle_astm algorithm

Regards
Eelco
rainflow_example.zip

@eelcovv
Copy link
Author

eelcovv commented Jun 14, 2017

For those interested. Using the same trick as above I was able to compile pywafo for python 3.5.3 as well. For this, I had to first update the Microsoft visual C++ compiler to version 15.0, which can be downloaded from here
http://landinghub.visualstudio.com/visual-cpp-build-tools

For the fortran compiler I installed MinGW version 5.3.0-3 and used the gfortran.exe coming with this.

Then I ran:
python setup.py build --compiler=msvc

This fails at the end with the same message as above, but again, if you copy the c_library.pyd from the build to the wafo directory you should be able to run pywafo including the rainflow algoritm. Attached an updated version of the rain_flow example.
Regards
Eelco
rainflow_example.zip

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants