[C++-sig] Help with problem caused going from boost_1_33_1 to 1_35_0
Tony Kirke
pyspuc at gmail.com
Thu Jun 12 01:31:15 CEST 2008
Still trying to figure out what is wrong here. Using Nicholas's makefile on
a newer Ubuntu system with python2.5 and libboost_python binaries installed
(1.34.1), I got this to work (Thanks Nicolas)
I've narrowed it down to the fact that linking to installed static library
works but locally built libboost_python fails. Not sure if this is a 1_35_0
vs 1_34_1 issue or something else
Thanks
On Tue, Jun 10, 2008 at 8:51 AM, Tony Kirke <pyspuc at gmail.com> wrote:
> Any suggestions on how to debug this with gdb? I had trouble trying to set
> breakpoints and resorted to adding printf statements. It's definitely
> getting the newest built libboost_python file and the local shared objects
> newly created.
>
>
> On Tue, Jun 10, 2008 at 7:55 AM, Tony Kirke <pyspuc at gmail.com> wrote:
>
>> Thank Nicolas,
>> I tried your makefile and am still getting a problem. I can only imagine
>> that there is something wrong with my libboost_python.a file or a g++ issue.
>> I also am running on linux with gcc 4.1.2
>> Tony
>>
>>
>> On Tue, Jun 10, 2008 at 12:01 AM, Nicolas Rougier <
>> Nicolas.Rougier at loria.fr> wrote:
>>
>>>
>>>
>>> I tested the code on linux using the attached makefile (I'm not familiar
>>> with bjam) and things are working ok (got 9 as a result of tes.py).
>>>
>>> Is there any chance you're not loading the module you think you're
>>> loading (from a previous installation of your python modules for
>>> example) ?
>>>
>>>
>>> Nicolas
>>>
>>>
>>>
>>> Makefile:
>>> ---------
>>>
>>> all:
>>> g++ butterworth_iir.cpp -shared -o libbutterworth_iir.so
>>> g++ py_butterworth_iir.cpp -I/usr/include/python2.5 -L .
>>> -lboost_python
>>> -lbutterworth_iir -shared -o butterworth_iir.so
>>>
>>> g++ iir_coeff.cpp -shared -o libiir_coeff.so
>>> g++ py_iir_coeff.cpp -I/usr/include/python2.5 -L . -liir_coeff
>>> -lboost_python -shared -o iir_coeff.so
>>>
>>> clean:
>>> rm *.so
>>>
>>>
>>>
>>> On Mon, 2008-06-09 at 20:05 -0700, Tony Kirke wrote:
>>> > Sorry, couldn't attach file. It is available here:
>>> >
>>> > http://pyspuc.com/testcase.tar.gz
>>> >
>>> > On Mon, Jun 9, 2008 at 6:58 PM, Tony Kirke <pyspuc at gmail.com> wrote:
>>> > Thanks Ralf,
>>> > I tried reversing the order to no avail. I'm attached a
>>> > gzipped tar file of the example, if anyone would like to try
>>> > it. I'd be grateful to confirm if there is an issue or not.
>>> > Only things that may need to be edited would be path to
>>> > boost_1_35_0 and python 2.4/2.5
>>> > Tony
>>> >
>>> > 2008/6/9 Ralf W. Grosse-Kunstleve <rwgk at yahoo.com>:
>>> >
>>> > I stared at your code for a few minutes but I don't
>>> > have an answer
>>> > for you. It looks like it should work. I'm not aware
>>> > of changes in
>>> > Boost.Python that could make your code fail.
>>> > I'd probably try to reverse the import order:
>>> >
>>> >
>>> > from spucb.iir_coeff import *
>>> > from spucb.butterworth_iir import *
>>> >
>>> >
>>> > although I don't expect this to make a difference.
>>> >
>>> > Ralf
>>> >
>>> >
>>> >
>>> > ----- Original Message ----
>>> > From: Tony Kirke <pyspuc at gmail.com>
>>> > To: c++-sig at python.org <c%2B%2B-sig at python.org>
>>> > Sent: Monday, June 9, 2008 8:25:20 AM
>>> > Subject: [C++-sig] Help with problem caused going from
>>> > boost_1_33_1 to 1_35_0
>>> >
>>> > Hi,
>>> > My c++ code that worked fine for Boost_1_33_1
>>> > (building with v1 system) is now giving the following
>>> > error with 1_35_0:
>>> >
>>> > Boost.Python.ArgumentError: Python argument types in
>>> > spucb.butterworth_iir.butterworth_iir(iir_coeff,
>>> > float)
>>> > did not match C++ signature:
>>> > butterworth_iir(iir_coeff {lvalue}, float)
>>> >
>>> > I done a lot of searching to find out what changed in
>>> > the newer Boost/boost build system and could not
>>> > figure out what to do.
>>> > Below is all of the code for a simple testcase. Since
>>> > I have lots of code that is broken in this way, I'm
>>> > wondering if there is an easy change that can be made
>>> > to the boost wrapping code (or source itself) to make
>>> > this functional. Is there a simple example of how
>>> > this problem is solved. Was there a fundamental reason
>>> > this is no longer supported?
>>> > Thanks
>>> >
>>> > Tony
>>> >
>>> > ------------------------------------------
>>> > class iir_coeff
>>> > {
>>> > public:
>>> > long order;
>>> >
>>> > public:
>>> > iir_coeff(long ord=1);
>>> > ~iir_coeff();
>>> > };
>>> > ------------------------------------------
>>> > #include "iir_coeff.h"
>>> > iir_coeff::iir_coeff(long ord) {
>>> > order = ord;
>>> > }
>>> > iir_coeff::~iir_coeff() {}
>>> > ------------------------------------------
>>> > // Boost Includes
>>> >
>>> ==============================================================
>>> > #include <boost/python.hpp>
>>> > #include <boost/cstdint.hpp>
>>> >
>>> > // Includes
>>> >
>>> ====================================================================
>>> > #include "iir_coeff.h"
>>> >
>>> > // Using
>>> >
>>> =======================================================================
>>> > using namespace boost::python;
>>> >
>>> > // Module
>>> >
>>> ======================================================================
>>> > BOOST_PYTHON_MODULE(iir_coeff)
>>> > {
>>> > class_< iir_coeff >("iir_coeff", init< const
>>> > iir_coeff& >())
>>> > .def(init< optional< long int > >())
>>> > .def_readwrite("order", &iir_coeff::order)
>>> > ;
>>> >
>>> > }
>>> > ------------------------------------------
>>> > #include "iir_coeff.h"
>>> > void butterworth_iir(iir_coeff& filt, float fcd);
>>> > ------------------------------------------
>>> > #include "butterworth_iir.h"
>>> > void butterworth_iir(iir_coeff& filt, float fcd) {
>>> > long order = filt.order;
>>> > filt.order = order+1;
>>> > }
>>> > ------------------------------------------
>>> > // Boost Includes
>>> >
>>> ==============================================================
>>> > #include <boost/python.hpp>
>>> > #include <boost/cstdint.hpp>
>>> >
>>> > // Includes
>>> >
>>> ====================================================================
>>> > #include "butterworth_iir.h"
>>> >
>>> > // Using
>>> >
>>> =======================================================================
>>> > using namespace boost::python;
>>> >
>>> > // Module
>>> >
>>> ======================================================================
>>> > BOOST_PYTHON_MODULE(butterworth_iir)
>>> > {
>>> > def("butterworth_iir", &butterworth_iir);
>>> > }
>>> >
>>> > ------------------------------------------
>>> > use-project boost : ../../boost_1_35_0 ;
>>> >
>>> > project
>>> > : requirements
>>> > <library>/boost/python//boost_python/<link>static
>>> > : usage-requirements <include>../../boost_1_35_0
>>> > <include>.
>>> > ;
>>> >
>>> > lib spuc :
>>> > butterworth_iir.cpp
>>> > iir_coeff.cpp
>>> > :
>>> > <include>.
>>> > <include>../../boost_1_35_0
>>> >
>>> > ;
>>> >
>>> > alias staticspuc : spuc/<link>static ;
>>> >
>>> > import python ;
>>> >
>>> >
>>> > python-extension butterworth_iir :
>>> > py_butterworth_iir.cpp : <include>.
>>> > <include>../../boost_1_35_0 : <library>staticspuc ;
>>> > python-extension iir_coeff : py_iir_coeff.cpp :
>>> > <include>. <include>../../boost_1_35_0 :
>>> > <library>staticspuc ;
>>> >
>>> > install dist :
>>> > __init__.py
>>> > butterworth_iir
>>> > iir_coeff
>>> > :
>>> >
>>> > <location>/usr/lib/python2.4/site-packages/spucb
>>> > ;
>>> >
>>> > ------------------------------------------
>>> > boost-build ../../boost_1_35_0/tools/build/v2 ;
>>> > ------------------------------------------
>>> >
>>> > from spucb.butterworth_iir import *
>>> > from spucb.iir_coeff import *
>>> > x=iir_coeff(8)
>>> > butterworth_iir(x,0.24)
>>> > print x.order
>>> >
>>> > ------------------------------------------
>>> > Traceback (most recent call last):
>>> > File "tes.py", line 4, in ?
>>> > butterworth_iir(x,0.24)
>>> > Boost.Python.ArgumentError: Python argument types in
>>> > spucb.butterworth_iir.butterworth_iir(iir_coeff,
>>> > float)
>>> > did not match C++ signature:
>>> > butterworth_iir(iir_coeff {lvalue}, float)
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > _______________________________________________
>>> > C++-sig mailing list
>>> > C++-sig at python.org <C%2B%2B-sig at python.org>
>>> > http://mail.python.org/mailman/listinfo/c++-sig
>>> >
>>> >
>>> >
>>> > _______________________________________________
>>> > C++-sig mailing list
>>> > C++-sig at python.org <C%2B%2B-sig at python.org>
>>> > http://mail.python.org/mailman/listinfo/c++-sig
>>>
>>> _______________________________________________
>>> C++-sig mailing list
>>> C++-sig at python.org <C%2B%2B-sig at python.org>
>>> http://mail.python.org/mailman/listinfo/c++-sig
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20080611/7c3a56d3/attachment.htm>
More information about the Cplusplus-sig
mailing list