问题
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 .dll
s, .lib
s and .h
s 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