Am 27.12.2013 11:30, schrieb cedric.dew...@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
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.

Dipl.-Inform. (FH) Reinhard Nissl

vdr mailing list

Reply via email to