[C++-sig] undefined symbols with def_readonly
Neal Becker
ndbecker2 at gmail.com
Thu Apr 10 15:55:45 CEST 2008
Roman Yakovenko wrote:
> On Thu, Apr 10, 2008 at 4:35 PM, Stefan Seefeld <seefeld at sympatico.ca>
> wrote:
>> Neal Becker wrote:
>>
>> > Surprisingly, this still doesn't work:
>> > ...
>> > .setattr ("TAIL_BITS", turbo_enc_1_15::TAIL_BITS)
>> >
>> > ImportError: ../mod/turbo_enc_1_15.so: undefined symbol:
>> > _ZN14turbo_enc_1_159TAIL_BITSE
>>
>> And this:
>>
>> int const tail_bits = turbo_enc_1_15::TAIL_BITS;
>>
>> ...
>> .setattr("TAIL_BITS", tail_bits)
>>
>> ?
>>
>> Note that the class_<>::setattr() method still takes a reference of its
>> second argument, which, if the compiler doesn't optimize it away, emits
>> a symbol reference. So, introducing this local 'tail_bits' variable has
>> basically the same effect as defining turbo_enc_1_15::TAIL_BITS. The
>> latter would obviously be the more proper solution to your problem, but
>> if you don't want or can't do that, such a local variable may be a
>> viable workaround. (Not sure how portable it is, though.)
>
> May be you should try some other way:
>
> using boost::python;
> scope().attr("TAIL_BITS") = object(TAIL_BITS);
>
Will this make it an class variable?
More information about the Cplusplus-sig
mailing list