mirror of
https://github.com/boostorg/python.git
synced 2026-01-22 17:32:55 +00:00
197 lines
9.5 KiB
HTML
197 lines
9.5 KiB
HTML
<html>
|
|
<head>
|
|
<!-- Generated by the Spirit (http://spirit.sf.net) QuickDoc -->
|
|
<title>Building Hello World</title>
|
|
<link rel="stylesheet" href="theme/style.css" type="text/css">
|
|
<link rel="prev" href="quickstart.html">
|
|
<link rel="next" href="exposing_classes.html">
|
|
</head>
|
|
<body>
|
|
<table width="100%" height="48" border="0" cellspacing="2">
|
|
<tr>
|
|
<td><img src="theme/c%2B%2Bboost.gif">
|
|
</td>
|
|
<td width="85%">
|
|
<font size="6" face="Verdana, Arial, Helvetica, sans-serif"><b>Building Hello World</b></font>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<br>
|
|
<table border="0">
|
|
<tr>
|
|
<td width="30"><a href="../index.html"><img src="theme/u_arr.gif" border="0"></a></td>
|
|
<td width="30"><a href="quickstart.html"><img src="theme/l_arr.gif" border="0"></a></td>
|
|
<td width="20"><a href="exposing_classes.html"><img src="theme/r_arr.gif" border="0"></a></td>
|
|
</tr>
|
|
</table>
|
|
<a name="from_start_to_finish"></a><h2>From Start To Finish</h2><p>
|
|
Now the first thing you'd want to do is to build the Hello World module and
|
|
try it for yourself in Python. In this section, we shall outline the steps
|
|
necessary to achieve that. We shall use the build tool that comes bundled
|
|
with every boost distribution: <b>bjam</b>.</p>
|
|
<table width="80%" border="0" align="center">
|
|
<tr>
|
|
<td class="note_box">
|
|
<img src="theme/lens.gif"></img> <b>Building without bjam</b><br><br>
|
|
|
|
Besides bjam, there are of course other ways to get your module built.
|
|
What's written here should not be taken as "the one and only way".
|
|
There are of course other build tools apart from <tt>bjam</tt>.
|
|
|
|
Take note however that the preferred build tool for Boost.Python is bjam.
|
|
There are so many ways to set up the build incorrectly. Experience shows
|
|
that 90% of the "I can't build Boost.Python" problems come from people
|
|
who had to use a different tool.
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<p>
|
|
We shall skip over the details. Our objective will be to simply create the
|
|
hello world module and run it in Python. For a complete reference to
|
|
building Boost.Python, check out: <a href="../../building.html">
|
|
building.html</a>.
|
|
After this brief <i>bjam</i> tutorial, we should have built two DLLs:</p>
|
|
<ul><li>boost_python.dll</li><li>hello.pyd</li></ul><p>
|
|
if you are on Windows, and</p>
|
|
<ul><li>libboost_python.so</li><li>hello.so</li></ul><p>
|
|
if you are on Unix.</p>
|
|
<p>
|
|
The tutorial example can be found in the directory:
|
|
<tt>libs/python/example/tutorial</tt>. There, you can find:</p>
|
|
<ul><li>hello.cpp</li><li>Jamfile</li></ul><p>
|
|
The <tt>hello.cpp</tt> file is our C++ hello world example. The <tt>Jamfile</tt> is a
|
|
minimalist <i>bjam</i> script that builds the DLLs for us.</p>
|
|
<p>
|
|
Before anything else, you should have the bjam executable in your boost
|
|
directory or somewhere in your path such that <tt>bjam</tt> can be executed in
|
|
the command line. Pre-built Boost.Jam executables are available for most
|
|
platforms. For example, a pre-built Microsoft Windows bjam executable can
|
|
be downloaded <a href="http://boost.sourceforge.net/jam-executables/bin.ntx86/bjam.zip">
|
|
here</a>.
|
|
The complete list of bjam pre-built
|
|
executables can be found <a href="../../../../../tools/build/index.html#Jam">
|
|
here</a>.</p>
|
|
<a name="let_s_jam_"></a><h2>Let's Jam!</h2><p>
|
|
<img src="theme/jam.png"></img></p>
|
|
<p>
|
|
Here is our minimalist Jamfile:</p>
|
|
<code><pre>
|
|
subproject libs/python/example/tutorial ;
|
|
|
|
SEARCH on python.jam = $(BOOST_BUILD_PATH) ;
|
|
include python.jam ;
|
|
|
|
extension hello # Declare a Python extension called hello
|
|
: hello.cpp # source
|
|
<dll>../../build/boost_python # dependencies
|
|
;
|
|
</pre></code><p>
|
|
First, we need to specify our location in the boost project hierarchy.
|
|
It so happens that the tutorial example is located in <tt>/libs/python/example/tutorial</tt>.
|
|
Thus:</p>
|
|
<code><pre>
|
|
subproject libs/python/example/tutorial ;
|
|
</pre></code><p>
|
|
Then we will include the definitions needed by Python modules:</p>
|
|
<code><pre>
|
|
SEARCH on python.jam = $(BOOST_BUILD_PATH) ;
|
|
include python.jam ;
|
|
</pre></code><p>
|
|
Finally we declare our <tt>hello</tt> extension:</p>
|
|
<code><pre>
|
|
extension hello # Declare a Python extension called hello
|
|
: hello.cpp # source
|
|
<dll>../../build/boost_python # dependencies
|
|
;
|
|
</pre></code><a name="running_bjam"></a><h2>Running bjam</h2><p>
|
|
<i>bjam</i> is run using your operating system's command line interpreter.</p>
|
|
<blockquote><p>Start it up.</p></blockquote><p>
|
|
Make sure that the environment is set so that we can invoke the C++
|
|
compiler. With MSVC, that would mean running the <tt>Vcvars32.bat</tt> batch
|
|
file. For instance:</p>
|
|
<code><pre>
|
|
<span class=identifier>C</span><span class=special>:\</span><span class=identifier>Program </span><span class=identifier>Files</span><span class=special>\</span><span class=identifier>Microsoft </span><span class=identifier>Visual </span><span class=identifier>Studio</span><span class=special>\</span><span class=identifier>VC98</span><span class=special>\</span><span class=identifier>bin</span><span class=special>\</span><span class=identifier>Vcvars32</span><span class=special>.</span><span class=identifier>bat
|
|
</span></pre></code>
|
|
<p>
|
|
Some environment variables will have to be setup for proper building of our
|
|
Python modules. Example:</p>
|
|
<code><pre>
|
|
<span class=identifier>set </span><span class=identifier>PYTHON_ROOT</span><span class=special>=</span><span class=identifier>c</span><span class=special>:/</span><span class=identifier>dev</span><span class=special>/</span><span class=identifier>tools</span><span class=special>/</span><span class=identifier>python
|
|
</span><span class=identifier>set </span><span class=identifier>PYTHON_VERSION</span><span class=special>=</span><span class=number>2.2
|
|
</span></pre></code>
|
|
<p>
|
|
The above assumes that the Python installation is in <tt>c:/dev/tools/python</tt>
|
|
and that we are using Python version 2.2. You'll have to tweak this path
|
|
appropriately. <img src="theme/note.gif"></img> Be sure not to include a third number, e.g. <b>not</b> "2.2.1",
|
|
even if that's the version you have.</p>
|
|
<p>
|
|
Now we are ready... Be sure to <tt>cd</tt> to <tt>libs/python/example/tutorial</tt>
|
|
where the tutorial <tt>"hello.cpp"</tt> and the <tt>"Jamfile"</tt> is situated.</p>
|
|
<p>
|
|
Finally:</p>
|
|
<code><pre>
|
|
<span class=identifier>bjam </span><span class=special>-</span><span class=identifier>sTOOLS</span><span class=special>=</span><span class=identifier>msvc
|
|
</span></pre></code>
|
|
<p>
|
|
We are again assuming that we are using Microsoft Visual C++ version 6. If
|
|
not, then you will have to specify the appropriate tool. See
|
|
<a href="../../../../../tools/build/index.html">
|
|
Building Boost Libraries</a> for
|
|
further details.</p>
|
|
<p>
|
|
It should be building now:</p>
|
|
<code><pre>
|
|
cd C:\dev\boost\libs\python\example\tutorial
|
|
bjam -sTOOLS=msvc
|
|
...patience...
|
|
...found 1703 targets...
|
|
...updating 40 targets...
|
|
</pre></code><p>
|
|
And so on... Finally:</p>
|
|
<code><pre>
|
|
vc-C++ ..\..\..\..\libs\python\example\tutorial\bin\hello.pyd\msvc\debug\
|
|
runtime-link-dynamic\hello.obj
|
|
hello.cpp
|
|
vc-Link ..\..\..\..\libs\python\example\tutorial\bin\hello.pyd\msvc\debug\
|
|
runtime-link-dynamic\hello.pyd ..\..\..\..\libs\python\example\tutorial\bin\
|
|
hello.pyd\msvc\debug\runtime-link-dynamic\hello.lib
|
|
Creating library ..\..\..\..\libs\python\example\tutorial\bin\hello.pyd\
|
|
msvc\debug\runtime-link-dynamic\hello.lib and object ..\..\..\..\libs\python\
|
|
example\tutorial\bin\hello.pyd\msvc\debug\runtime-link-dynamic\hello.exp
|
|
...updated 40 targets...
|
|
</pre></code><p>
|
|
If all is well, you should now have:</p>
|
|
<ul><li>boost_python.dll</li><li>hello.pyd</li></ul><p>
|
|
if you are on Windows, and</p>
|
|
<ul><li>libboost_python.so</li><li>hello.so</li></ul><p>
|
|
if you are on Unix.</p>
|
|
<p>
|
|
<tt>boost_python.dll</tt> can be found somewhere in <tt>libs\python\build\bin</tt>
|
|
while <tt>hello.pyd</tt> can be found somewhere in
|
|
<tt>libs\python\example\tutorial\bin</tt>. After a successful build, you can just
|
|
link in these DLLs with the Python interpreter. In Windows for example, you
|
|
can simply put these libraries inside the directory where the Python
|
|
executable is.</p>
|
|
<p>
|
|
You may now fire up Python and run our hello module:</p>
|
|
<code><pre>
|
|
<span class=special>>>> </span><span class=identifier>import </span><span class=identifier>hello
|
|
</span><span class=special>>>> </span><span class=identifier>print </span><span class=identifier>hello</span><span class=special>.</span><span class=identifier>greet</span><span class=special>()
|
|
</span><span class=identifier>hello</span><span class=special>, </span><span class=identifier>world
|
|
</span></pre></code>
|
|
<blockquote><p><b>There you go... Have fun!</b></p></blockquote><table border="0">
|
|
<tr>
|
|
<td width="30"><a href="../index.html"><img src="theme/u_arr.gif" border="0"></a></td>
|
|
<td width="30"><a href="quickstart.html"><img src="theme/l_arr.gif" border="0"></a></td>
|
|
<td width="20"><a href="exposing_classes.html"><img src="theme/r_arr.gif" border="0"></a></td>
|
|
</tr>
|
|
</table>
|
|
<br>
|
|
<hr size="1"><p class="copyright">Copyright © 2002-2003 David Abrahams<br>Copyright © 2002-2003 Joel de Guzman<br><br>
|
|
<font size="2">Permission to copy, use, modify, sell and distribute this document
|
|
is granted provided this copyright notice appears in all copies. This document
|
|
is provided "as is" without express or implied warranty, and with
|
|
no claim as to its suitability for any purpose. </font> </p>
|
|
</body>
|
|
</html>
|