Связывание разделяемой библиотеки libdvbv5, неопределенная ссылка - PullRequest
0 голосов
/ 15 ноября 2018

Я использую библиотеку libdvbv5, но у меня возникают проблемы с компиляцией моей программы.

У меня есть заголовки в / usr / local / include и есть libdvbv5.so в / usr / local / lib.

Код чрезвычайно прост:

#include "libdvbv5/dvb-dev.h"

void doSatTest() {
    struct dvb_device *dvb;
    struct dvb_dev_list *dvb_dev;

    dvb = dvb_dev_alloc();
}

Индексатор затмения удовлетворен тем, что функция "dvb_dev_alloc" существует в заголовочном файле "dvb-dev.h", и файл компилируется, но завершается ошибкой по ссылке

Я прекратил использовать Eclipse Builder, чтобы я мог упростить команду сборки и точно определить, что происходит.

Я пытаюсь скомпилировать и связать, используя следующую команду:

g++ sat_test.cpp -ldvbv5

Однако это не с:

sat_test.cpp:(.text+0x1f): undefined reference to `dvb_dev_alloc()'

Чего мне не хватает?

1 Ответ

0 голосов
/ 16 ноября 2018

Проблема в том, что libdvbv5/dvb-dev.h не предоставляет правильный прототип C++, и вы включаете его в файл .cpp.

Исправление должно сделать это:

extern "C" {
#include "libdvbv5/dvb-dev.h"
}
... rest as before.

С вышеуказанным исправлением ваша программа будет нормально связываться.

Более подробное объяснение здесь .

...