I’m thinking I should write a simple C++ harness to call the block. That way, I can isolate a SWIG problem from a block/C++ issue. Should the SWIG link libraries (GR_SWIG_LIBRARIES) be different from the libraries used in the lib directory?
PWG
Yes, gr-pwg is the OOT module.
nm on libpwg.so yields:
nm libgnuradio-pwg.so | grep -i _ZN2gr7trellis26viterbi_algorithm_combinedIfhEEviiiRKSt6vectorIiSaIiEES6_RKS2_IS4_SaIS4_EESA_iiiiRKS2_IT_SaISB_EENS_7digital21trellis_metric_type_tEPKSB_PT0_
U _ZN2gr7trellis26viterbi_algorithm_combinedIfhEEviiiRKSt6vectorIiSaIiEES6_RKS2_IS4_SaIS4_EESA_iiiiRKS2_IT_SaISB_EENS_7digital21trellis_metric_type_tEPKSB_PT0_
It is undefined in libgnuradio-pwg, but libgnuradio-pwg links with libgnuradio-trellis, which provides the implementation as we saw before. I don't see an issue with this. What am I missing?
In lib/, the target_link_libraries looks like:
target_link_libraries(gnuradio-pwg ${Boost_LIBRARIES} ${GNURADIO_ALL_LIBRARIES})
GNURADIO_ALL_LIBRARIES=/usr/local/lib/libgnuradio-runtime.so/usr/local/lib/libgnuradio-pmt.so/usr/local/lib/libgnuradio-digital.so/usr/local/lib/libgnuradio-trellis.so
It does appear that GR_REQUIRED_COMPONENTS is properly updating cmake since gr-trellis lib is in the directive.
I grep'd through the entire gnuradio source tree and I can't find another instance (except gr-trellis in the viterbi_algorithm_combined blocks) calling viterbi_algorithm_combined().
Thanks for the suggestions. Still trying to track this one down; it has been very elusive!
PWG
Good
spotting, Cinaed!
judging from his initials, I'd guess gr-pwg is Paul's OOT module. Point
is that libgnuradio-pwg contains a reference to, but no implementation
of, the missing symbol, which is
_ZN2gr7trellis26viterbi_algorithm_combinedIfhEEviiiRKSt6vectorIiSaIiEES6_RKS2_IS4_SaIS4_EESA_iiiiRKS2_IT_SaISB_EENS_7digital21trellis_metric_type_tEPKSB_PT0_
or to put it more "readable" (ha, ha.) in C++ terms:
void gr::trellis::viterbi_algorithm_combined<float, unsigned char>(int, int, int, std::vector<int, std::allocator<int> > const&, std::vector<int, std::allocator<int> > const&, std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int,
std::allocator<int> > > > const&, std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > > const&, int, int, int, int, std::vector<float, std::allocator<float> > const&, gr::digital::trellis_metric_type_t,
float const*, unsigned char*)
or omitting standard template arguments and trying to format things:
void
gr::trellis::viterbi_algorithm_combined <float, unsigned char> (
int,
int,
int,
std::vector<int> const&,
std::vector<int> const&,
std::vector< std::vector<int> > const&,
std::vector< std::vector<int> > const&,
int,
int,
int,
int,
std::vector<float> const&,
gr::digital::trellis_metric_type_t,
float const*,
unsigned char*)
Anyway, the question is why linking doesn't look like it should.
Just to get this out of the way: Paul, what does your
lib/CMakeLists.txt's "target_link_libraries" directive look like, exactly?
Best regards,
Marcus
On 14.11.2016 22:38, Cinaed Simson wrote:
> On 11/14/2016 06:34 AM, Garver, Paul W wrote:
>> objdump -t /usr/local/lib/libgnuradio-trellis-3.7.11git.so.0.0.0
> Isn't this a different library from the previous error message, namely
>
>> ImportError: /usr/local/lib/libgnuradio-pwg-1.0.0git.so.0.0.0:
> undefined symbol:
>
> On Linux, I don't have the library libgnuradio-pwg - should I?
>
> I have libgnuradio-trellis.
>
> -- Cinaed
>
> _______________________________________________
> Discuss-gnuradio mailing list
> address@hidden
> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
_______________________________________________
Discuss-gnuradio mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
_______________________________________________
Discuss-gnuradio
mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
|