Installing pymatbridge on Windows

怎甘沉沦 提交于 2019-12-01 07:21:35

问题


In version 0.3 of pymatbridge, an additional dependency was added for ZMQ. To install this version, you might therefore need to compile a messenger mex extension linking against a dll of zeromq. However, this turns out to be rather difficult to do in some cases.

Does anyone have examples of success stories installing pymatbridge from source on a machine running Windows?


回答1:


Some of the other answers are a little bit outdated, and this can be done much more easily now (still won't be as easy on a Linux system :/). First of all, pymatbridge now includes a binary mex on Windows which is statically linked to libzmq, so you shouldn't actually have to compile anything to get it to work.

However, if you still want to do compile it from source, the process isn't too bad for a dynamically linked library.

1) Install zeromq from the website: http://zeromq.org/distro:microsoft-windows

2) Rename one of the lib/libzmq-*.lib files to libzmq.lib in the ZeroMQ installation directory

3) Add the ZeroMQ bin directory to your path.

4) Edit the messenger/mexw64/local.cfg file in messenger to point to the zeromq install directory (you will need to update both ZMQ_INC and ZMQ_LIB). Also ensure the MATLAB directory is correct.

5) Run make.py matlab in the messenger directory. This should build messenger.mexw64

A statically linked library is simple in practice, but because zeromq (as of now) does not provide a .lib for static linking with the windows installer, you will need to compile this yourself. After you have a static .lib, build messenger.mexw64 with make matlab --static




回答2:


Here's my setup and build instructions; apologies for the verbosity -- this is from a write-up I did for my lab notebook.

Specifications:

Windows 8.1 (64 bit)
Anaconda 1.9.1
python 2.7.6
MinGW
TDM GCC 4.8.1

First I installed MS Visual C++ & SDK 7.1. Possible reason for the install to fail quite early on is the presence of other Visual C++ compiler versions and/or SDKs -- before successfully installing SDK 7.1 I had to uninstall quite a few of them.

First, using the Windows SDK 7.1 Command Prompt, I

mex -setup

and selected the newly installed compiler. In my case

Select a compiler:
[1] Microsoft Software Development Kit (SDK) 7.1 in 
C:\Program Files (x86)\Microsoft Visual Studio 10.0

[0] None

Compiler:

I elected to pick number 1. Next I downloaded and installed a prebuilt 64 bit ZMQ 3.2.4, and from the ZMQ 3.2.4 install location, C:\Program Files\ZeroMQ 3.2.4\lib, I copied libzmq-v90-mt_3_2_4.lib, and libzmq-v90-mt_3_2_4.dll from C:\Program Files\ZeroMQ 3.2.4\bin to the messenger build directory, ~\python-matlab-bridge\messenger\src. I also put zmq.h and zmq_utils.h into that directory but as of now am unsure if they are really necessary.

Then, in the Windows SDK 7.1 Command Prompt, I cded into the messenger\src directory and issued

mex messenger.c libzmq-v90-mt-3_2_4.lib -O -output messenger

to obtain a messenger.mexw64. Finally, in the ~\python-matlab-bridge directory, using MinGW, I just

python setup.py install

This automatically put the built package into my Anaconda\Lib\site-packages along with an egg info. In Anaconda\Lib\site-packages\pymatbridge\matlab there is the messenger.mexw64 that was built earlier -- from ~\python-matlab-bridge\messenger\src. I also copied to Anaconda\Lib\site-packages\pymatbridge\matlab all other .dlls, .libs and .hs for good measure. Now in the iPython 2.7 console, or an iPython Notebook, I can

%load_ext pymatbridge

successfully.




回答3:


As I use Visual Studio as my standard IDE I fiddled around and got a working build process. I used:

VS 2013
Matlab 2013b x64
Python 3.3 x64
ZeroMQ 4.0.4.

If you use different Versions please make sure that you adjust the Path where necessary.

Build messenger using Visual Studio (2013)

  • First create a new Solution with an empty C++ Project.
  • Set up the configuration, e.g. x64 Release
  • Open up the Project Properties and set up the following:

Configuartion Properties -> General:

Target Name: messenger

Target Extension: .mexw64

Configuration Type: Dynamic Library (.dll)

Configuartion Properties -> VC++ Directories -> Include Directories:

MATLABPATH \extern\include

ZEROMQ PATH\include

Configuartion Properties -> VC++ Directories -> Library Directories:

MATLABPATH \extern\lib\win64\microsoft

ZEROMQ PATH \lib

Configuartion Properties -> Linker -> Input -> Additional Dependencies:

libmx.lib; libmex.lib; libmat.lib; libzmq-v120-mt-4_0_4.dll

Configuartion Properties -> Linker ->Command Line -> Additional Options:

/export:mexFunction

  • Add messenger.c as source file
  • Build the library
  • Copy it to: PYTHONPATH \Lib\site-packages\pymatbridge\matlab\

Please Note:

I got some incompatible error cause by the function names already present in windows.h. The solution was to rename:

  • initialize
  • listen
  • respond
  • cleanup

to:

  • initializeMat
  • listenMat
  • respondMat
  • cleanupMat


来源:https://stackoverflow.com/questions/23716426/installing-pymatbridge-on-windows

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!