[vdr] porting vdr-plugin-sc from FFdecsa to dvbcsa: undefined symbol

Reinhard Nissl rnissl at gmx.de
Fri Dec 27 12:14:40 CET 2013


Hi,

Am 27.12.2013 11:30, schrieb cedric.dewijs at telfort.nl:

>     This compiles and installs fine, but I see the following
>     error in /var/log/syslog when I start VDR
>     vdr: [8061] ERROR: /usr/lib/vdr/plugins/libvdr-sc.so.1.7.28:
>     undefined symbol: _Z18dvbcsa_bs_key_freeP15dvbcsa_bs_key_s
>     vdr: [8118] VDR version 1.7.28 started
>
> I find this odd, because /usr/include/dvbcsa/dvbcsa.h contains
> the function prototypes for both dvbcsa_bs_key_free and
> dvbcsa_bs_key_s :
> void dvbcsa_bs_key_free(struct dvbcsa_bs_key_s *key);
> struct dvbcsa_bs_key_s * dvbcsa_bs_key_alloc(void);
>
> But why are they concatenated into one symbol?

Looks like you are using a plain C library with C++. The 
undefined symbol is a C++ decorated one:

corei7:~ # c++filt _Z18dvbcsa_bs_key_freeP15dvbcsa_bs_key_s
dvbcsa_bs_key_free(dvbcsa_bs_key_s*)
corei7:~ #

It seems like the header files for libdvbcsa are not prepared for 
C++. So the compiler puts a reference for a C++ decorated symbol 
into the object file which the linker cannot resolve as the 
library seems to contain only plain C symbols.

Try to put the #include statements for those header files into an 
extern C block, like this:

extern "C" {
#include "headerfile.h"
}

This makes the compiler interpret the header file as plain C and 
-- as a result -- generate plain C symbol references.

Hope this helps.

Bye.
-- 
Dipl.-Inform. (FH) Reinhard Nissl
mailto:rnissl at gmx.de



More information about the vdr mailing list