[C++-sig] [Py++] Undefined symbols for static const int member of class

Roman Yakovenko roman.yakovenko at gmail.com
Fri May 21 13:49:12 CEST 2010

On Fri, May 21, 2010 at 1:05 PM, Brian O'Kennedy <brokenn at gmail.com> wrote:
> Hi,
> I'm wrapping a very simple class using PyPlusPlus.
> ---- snip ----
>  class testclass
>  {
>   public:
>    static const int a = 99;
>  };
> ---- /snip ----
> And Py++ exposes the static member with a def_readonly("a", testclass::a )
> call. When I import this module into python I get an undefined symbol for
> testclass::a.
>   ImportError: ./testwrapper.so: undefined symbol: _ZN9testclass1aE
> I understand that the static member has no storage and thus boost python
> cannot find the address of it. However, I was hoping there is a way to solve
> this kind of (common?) problem using Py++ to perhaps generate a getter
> function or something similar. How would one do this?

Try to move "a" initialization to a .cpp file.

I also suggest you to take a look on Py++ unittests, especially on
"statics_tester.py" and "statics_to_be_exported.[c|h]pp" files. They
deal with exactly your use case

Roman Yakovenko
C++ Python language binding

More information about the Cplusplus-sig mailing list